/* * Copyright (c) 2006-2011 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit; import java.util.concurrent.*; import static org.junit.Assert.*; import org.junit.*; @SuppressWarnings({"UnusedDeclaration"}) public final class RestrictedFullVerificationsTest { static class Dependency { public void setSomething(int value) {} public int editABunchMoreStuff() { return 0; } public boolean prepare() { return false; } public void save() {} static void staticMethod(String s) {} } static final class SubDependency extends Dependency { int getValue() { return 5; } } static final class AnotherDependency { void doSomething() {} String doSomethingElse(int i) { return "" + i; } static boolean staticMethod() { return true; } } @Mocked Dependency mock; private void exerciseCodeUnderTest() { mock.prepare(); mock.setSomething(123); mock.editABunchMoreStuff(); mock.save(); } @Test public void verifyAllInvocationsToOnlyOneOfTwoMockedTypes(AnotherDependency mock2) { exerciseCodeUnderTest(); mock2.doSomething(); new FullVerifications(mock) {{ mock.prepare(); mock.setSomething(anyInt); minTimes = 1; maxTimes = 2; mock.editABunchMoreStuff(); mock.save(); times = 1; }}; new FullVerifications(mock.getClass()) {{ mock.prepare(); mock.setSomething(anyInt); minTimes = 1; maxTimes = 2; mock.editABunchMoreStuff(); mock.save(); times = 1; }}; } @Test(expected = AssertionError.class) public void verifyAllInvocationsWithSomeMissing(final AnotherDependency mock2) { exerciseCodeUnderTest(); mock2.doSomething(); new FullVerifications(mock, mock2) {{ mock.prepare(); mock.setSomething(anyInt); mock.save(); mock2.doSomething(); }}; } @Test public void verifyOnlyInvocationsToGenericType(final Callable<Dependency> mock2) throws Exception { exerciseCodeUnderTest(); mock2.call(); new FullVerificationsInOrder(mock2) {{ mock2.call(); }}; } @Test public void verifyAllInvocationsToOneOfTwoMocksInIteratingBlock(AnotherDependency mock2) { mock2.doSomething(); mock.setSomething(123); mock.save(); mock2.doSomethingElse(1); mock.setSomething(45); mock.save(); mock2.doSomethingElse(2); new FullVerifications(2, mock) {{ mock.setSomething(anyInt); mock.save(); }}; } @Test public void verifyAllInvocationsToInheritedMethods(SubDependency mock2) { mock.prepare(); mock2.getValue(); new FullVerificationsInOrder(1, mock) { { mock.prepare(); } }; new FullVerificationsInOrder(Dependency.class) { { mock.prepare(); } }; } @Test(expected = AssertionError.class) public void verifyAllInvocationsToInheritedMethods_whenNotVerified(final SubDependency mock2) { mock.prepare(); mock2.getValue(); new FullVerifications(1, mock) { { mock2.getValue(); } }; } @Test public void verifyAllInvocationsToSubclassMethods(final SubDependency mock2) { mock.prepare(); mock2.getValue(); new FullVerifications(1, mock2.getClass()) { { mock2.getValue(); } }; } @Test(expected = AssertionError.class) public void verifyAllInvocationsToSubclassMethods_whenNotVerified(final SubDependency mock2) { mock.prepare(); mock2.getValue(); new FullVerificationsInOrder(1, mock2.getClass()) { { mock.prepare(); } }; } @Test public void verifyAllInvocationsToMethodsOfBaseClassAndOfSubclass(final SubDependency mock2) { mock.prepare(); mock2.getValue(); new FullVerifications(mock2) { { mock.prepare(); mock2.getValue(); } }; } @Test(expected = AssertionError.class) public void verifyAllInvocationsToMethodsOfBaseClassAndOfSubclass_whenInheritedMethodNotVerified( final SubDependency mock2) { mock.prepare(); mock2.getValue(); new FullVerificationsInOrder(mock2) { { mock2.getValue(); } }; } @Test(expected = AssertionError.class) public void verifyAllInvocationsToMethodsOfBaseClassAndOfSubclass_whenSubclassMethodNotVerified( final SubDependency mock2) { mock.prepare(); mock2.getValue(); new FullVerifications(mock2) { { mock.prepare(); } }; } @Test public void verifyAllInvocationsWithReplayOnDifferentInstance() { new Dependency().save(); new FullVerificationsInOrder(mock) { { new Dependency(); mock.save(); } }; } @Test public void verifyAllInvocationsWithReplayOnSameInstance(final Dependency mock2) { mock2.editABunchMoreStuff(); new FullVerifications(mock2) { { mock2.editABunchMoreStuff(); } }; } @Test(expected = AssertionError.class) public void verifyAllWithReplayOnDifferentInstanceWhenShouldBeSame(final Dependency mock2) { mock2.editABunchMoreStuff(); new FullVerificationsInOrder(mock2) { { mock.editABunchMoreStuff(); } }; } @Test(expected = AssertionError.class) public void verifyAllWithUnverifiedReplayOnSameInstance(final Dependency mock2) { mock.editABunchMoreStuff(); mock2.editABunchMoreStuff(); new FullVerifications(mock2) { { mock.editABunchMoreStuff(); } }; } @Test public void verifyStaticInvocationForSpecifiedMockInstance(final AnotherDependency mock2) { mock2.doSomething(); AnotherDependency.staticMethod(); mock2.doSomethingElse(1); mock.editABunchMoreStuff(); mock2.doSomethingElse(2); new FullVerificationsInOrder(mock2) { { mock2.doSomething(); AnotherDependency.staticMethod(); mock2.doSomethingElse(anyInt); mock2.doSomethingElse(anyInt); } }; } @Test(expected = AssertionError.class) public void unverifiedStaticInvocationForSpecifiedMockInstance(final AnotherDependency mock2) { mock2.doSomething(); AnotherDependency.staticMethod(); new FullVerifications(mock2) { { mock2.doSomething(); } }; } @Test(expected = AssertionError.class) public void unverifiedStaticInvocationForSpecifiedSubclassInstance(final SubDependency mock2) { mock2.getValue(); Dependency.staticMethod("test"); new FullVerificationsInOrder(1, mock2) { { mock2.getValue(); } }; } @Test public void verifyNoInvocationsOccurredOnOneOfTwoMockedDependencies(AnotherDependency mock2) { mock2.doSomething(); new FullVerifications(mock) {}; } @Test public void verifyNoInvocationsOccurredOnMockedDependencyWithOneHavingOccurred(AnotherDependency mock2) { mock2.doSomething(); mock.editABunchMoreStuff(); try { new FullVerifications(mock) {}; fail(); } catch (AssertionError e) { assertTrue(e.getMessage().contains("editABunchMoreStuff()")); } } @Test public void verifyNoInvocationsOnOneOfTwoMockedDependenciesBeyondThoseRecordedAsExpected( final AnotherDependency mock2) { new NonStrictExpectations() {{ mock.setSomething(anyInt); minTimes = 1; mock2.doSomething(); times = 1; }}; mock.prepare(); mock.setSomething(1); mock.setSomething(2); mock.save(); mock2.doSomething(); new FullVerifications(mock2) {}; } }