/* * 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); } }