| /* |
| * Copyright (c) 2007 Mockito contributors |
| * This program is made available under the terms of the MIT License. |
| */ |
| |
| package org.mockitousage.basicapi; |
| |
| import org.junit.Test; |
| import org.mockitoutil.TestBase; |
| |
| import java.io.Serializable; |
| |
| import static junit.framework.TestCase.assertSame; |
| import static org.mockitoutil.SimpleSerializationUtil.serializeAndBack; |
| |
| @SuppressWarnings("serial") |
| public class ObjectsSerializationTest extends TestBase implements Serializable { |
| |
| //Ok, this test has nothing to do with mocks but it shows fundamental feature of java serialization that |
| //plays important role in mocking: |
| //Serialization/deserialization actually replaces all instances of serialized object in the object graph (if there are any) |
| //thanks to that mechanizm, stubbing & verification can correctly match method invocations because |
| //one of the parts of invocation matching is checking if mock object is the same |
| |
| class Bar implements Serializable { |
| Foo foo; |
| } |
| |
| class Foo implements Serializable { |
| Bar bar; |
| Foo() { |
| bar = new Bar(); |
| bar.foo = this; |
| } |
| } |
| |
| @Test |
| public void shouldSerializationWork() throws Exception { |
| //given |
| Foo foo = new Foo(); |
| //when |
| foo = serializeAndBack(foo); |
| //then |
| assertSame(foo, foo.bar.foo); |
| } |
| } |