/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit; import org.junit.*; import static org.junit.Assert.*; public final class MockFieldCapturingMaxInstancesTest { static DerivedClass preexistingInstance; @BeforeClass public static void createAndUseInstancesBeforeCapturingIsInEffect() { assertEquals(1, new ServiceImpl().doSomething()); preexistingInstance = new DerivedClass(); assertEquals("", preexistingInstance.getStr()); assertEquals("test1", new DerivedClass("test1").getStr()); } public interface Service { int doSomething(); } static final class ServiceImpl implements Service { @Override public int doSomething() { return 1; } } @Capturing Service mock1; @Test public void mockFieldWithUnlimitedCapturing() { assertEquals(0, new ServiceImpl().doSomething()); new Expectations() {{ mock1.doSomething(); returns(1, 2, 3); }}; Service service1 = new ServiceImpl(); assertEquals(1, service1.doSomething()); Service service2 = new Service() { @Override public int doSomething() { return -1; } }; assertEquals(2, service2.doSomething()); Service service3 = new ServiceImpl(); assertEquals(3, service3.doSomething()); } static class BaseClass { final String str; BaseClass() { str = ""; } BaseClass(String str) { this.str = str; } final String getStr() { return str; } } static class DerivedClass extends BaseClass { DerivedClass() {} DerivedClass(String str) { super(str); } } @Capturing(maxInstances = 1) BaseClass mock2; @Test public void mockFieldWithCapturingLimitedToOneInstance() { new Expectations() {{ mock2.getStr(); result = "mocked"; }}; assertNull(preexistingInstance.getStr()); BaseClass service1 = new DerivedClass("test 1"); assertNull(service1.str); assertEquals("mocked", service1.getStr()); BaseClass service2 = new BaseClass("test 2"); assertNull(service2.str); assertNull(service2.getStr()); new Verifications() {{ preexistingInstance.getStr(); times = 1; }}; } @Capturing(maxInstances = 1) BaseClass mock3; @Test public void secondMockFieldWithCapturingLimitedToOneInstance() { new Expectations() {{ mock2.getStr(); result = "mocked1"; times = 1; mock3.getStr(); result = "mocked2"; times = 1; }}; assertNull(preexistingInstance.getStr()); BaseClass service1 = new DerivedClass("test 1"); assertNull(service1.str); assertEquals("mocked1", service1.getStr()); BaseClass service2 = new BaseClass("test 2"); assertNull(service2.str); assertEquals("mocked2", service2.getStr()); BaseClass service3 = new DerivedClass("test 3"); assertNull(service3.str); assertNull(service3.getStr()); } }