/* * Copyright (c) 2006-2011 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit; import org.junit.*; public final class FullVerificationsInOrderTest { @SuppressWarnings({"UnusedParameters"}) public static class Dependency { public void setSomething(int value) {} public void setSomethingElse(char value) {} public int editABunchMoreStuff() { return 0; } public void notifyBeforeSave() {} public boolean prepare() { return false; } public void save() {} } @Mocked Dependency mock; void exerciseCodeUnderTest() { mock.prepare(); mock.setSomething(123); mock.setSomethingElse('a'); mock.setSomething(45); mock.editABunchMoreStuff(); mock.notifyBeforeSave(); mock.save(); } @After public void verifyCommonExpectedInvocation() { new Verifications() {{ mock.setSomething(anyInt); }}; } @Test public void verifyAllInvocations() { exerciseCodeUnderTest(); new FullVerificationsInOrder() {{ mock.prepare(); minTimes = 1; mock.setSomething(anyInt); minTimes = 0; maxTimes = 2; mock.setSomethingElse(anyChar); mock.setSomething(anyInt); minTimes = 1; maxTimes = 2; mock.editABunchMoreStuff(); mock.notifyBeforeSave(); maxTimes = 1; mock.save(); times = 1; }}; } @Test public void verifyAllInvocationsWithSomeOfThemRecorded() { new NonStrictExpectations() { { mock.prepare(); result = true; mock.editABunchMoreStuff(); result = 5; } }; exerciseCodeUnderTest(); new FullVerificationsInOrder() {{ mock.prepare(); minTimes = 1; mock.setSomething(anyInt); minTimes = 0; maxTimes = 2; mock.setSomethingElse(anyChar); mock.setSomething(anyInt); minTimes = 1; maxTimes = 2; mock.editABunchMoreStuff(); mock.notifyBeforeSave(); maxTimes = 1; mock.save(); times = 1; }}; } @Test public void verifyAllInvocationsWithThoseRecordedAsExpectedToOccurVerifiedImplicitly() { new NonStrictExpectations() {{ mock.setSomething(45); times = 1; mock.editABunchMoreStuff(); result = 5; minTimes = 1; }}; exerciseCodeUnderTest(); new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(123); mock.setSomethingElse(anyChar); mock.notifyBeforeSave(); mock.save(); }}; } @Test public void verifyAllInvocationsExceptThoseAlreadyVerifiedInAPreviousVerificationBlock() { exerciseCodeUnderTest(); new VerificationsInOrder() {{ mock.setSomething(45); mock.editABunchMoreStuff(); }}; new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(123); mock.setSomethingElse(anyChar); mock.notifyBeforeSave(); mock.save(); }}; } @Test public void verifyInvocationsWithOneRecordedButNotReplayed() { new NonStrictExpectations() { { mock.prepare(); result = true; mock.editABunchMoreStuff(); result = 5; } }; mock.prepare(); mock.setSomething(123); mock.setSomethingElse('a'); mock.save(); new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(anyInt); mock.setSomethingElse(anyChar); mock.save(); }}; } @Test(expected = AssertionError.class) public void verifyAllInvocationsWhenOutOfOrder() { mock.setSomething(123); mock.prepare(); new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(123); }}; } @Test(expected = AssertionError.class) public void verifyAllInvocationsWithSomeMissing() { exerciseCodeUnderTest(); new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(anyInt); mock.setSomethingElse(anyChar); mock.notifyBeforeSave(); mock.save(); }}; } @Test(expected = AssertionError.class) public void verifyAllInvocationsWithExpectationRecordedButOneInvocationUnverified() { new NonStrictExpectations() {{ mock.setSomething(anyInt); }}; mock.setSomething(123); mock.editABunchMoreStuff(); mock.setSomething(45); new FullVerificationsInOrder() {{ mock.setSomething(anyInt); mock.editABunchMoreStuff(); }}; } @Ignore @Test(expected = AssertionError.class) public void verifyTwoInvocationsWithIteratingBlockHavingExpectationRecordedAndSecondInvocationUnverified() { new NonStrictExpectations() {{ mock.setSomething(anyInt); }}; mock.setSomething(123); mock.setSomething(45); new FullVerificationsInOrder(2) {{ mock.setSomething(123); }}; } @Test public void verifyInvocationThatNeverHappens() { mock.prepare(); mock.setSomething(123); new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(123); mock.notifyBeforeSave(); times = 0; }}; } @Test(expected = AssertionError.class) public void verifyInvocationThatShouldNeverHappenButDoes() { mock.setSomething(1); mock.notifyBeforeSave(); new FullVerificationsInOrder() {{ mock.setSomething(1); mock.notifyBeforeSave(); times = 0; }}; } @Test public void verifyInvocationThatIsAllowedToHappenAnyNumberOfTimesAndHappensOnce() { mock.prepare(); mock.setSomething(123); mock.save(); new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(anyInt); mock.save(); minTimes = 0; }}; } @Test public void verifyRecordedInvocationThatIsAllowedToHappenAnyNoOfTimesAndDoesNotHappen() { new NonStrictExpectations() {{ mock.save(); }}; mock.prepare(); mock.setSomething(123); new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(anyInt); mock.save(); minTimes = 0; }}; } @Test public void verifyUnrecordedInvocationThatIsAllowedToHappenAnyNoOfTimesAndDoesNotHappen() { mock.prepare(); mock.setSomething(123); new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(anyInt); mock.save(); minTimes = 0; }}; } @Test public void verifyIntermediateUnrecordedInvocationThatDoesNotHappenButCould() { mock.prepare(); mock.setSomething(123); new FullVerificationsInOrder() {{ mock.prepare(); mock.editABunchMoreStuff(); minTimes = 0; mock.setSomething(anyInt); }}; } @Test(expected = AssertionError.class) public void verifyAllInvocationsWithExtraVerification() { mock.prepare(); mock.setSomething(123); new FullVerificationsInOrder() {{ mock.prepare(); mock.setSomething(123); mock.notifyBeforeSave(); }}; } @Test(expected = AssertionError.class) public void verifyAllInvocationsWithInvocationCountLessThanActual() { mock.setSomething(123); mock.setSomething(45); new FullVerificationsInOrder() {{ mock.setSomething(anyInt); times = 1; }}; } @Test(expected = AssertionError.class) public void verifyAllInvocationsWithInvocationCountMoreThanActual() { mock.setSomething(-67); new FullVerificationsInOrder() {{ mock.setSomething(anyInt); minTimes = 3; maxTimes = 6; }}; } @Test public void verifyAllInvocationsInIteratingBlock() { mock.setSomething(123); mock.save(); mock.setSomething(45); mock.save(); new FullVerificationsInOrder(2) {{ mock.setSomething(anyInt); mock.save(); }}; } @Test(expected = AssertionError.class) public void verifySingleInvocationInBlockWithLargerNumberOfIterations() { mock.setSomething(123); new FullVerificationsInOrder(3) {{ mock.setSomething(123); }}; } @Test(expected = AssertionError.class) public void verifyMultipleInvocationsInBlockWithSmallerNumberOfIterations() { mock.setSomething(123); mock.setSomething(45); new FullVerificationsInOrder(1) {{ mock.setSomething(anyInt); }}; } @Test public void verifyWithArgumentMatcherAndIndividualInvocationCountsInIteratingBlock() { for (int i = 0; i < 2; i++) { exerciseCodeUnderTest(); } new FullVerificationsInOrder(2) {{ mock.prepare(); maxTimes = 1; mock.setSomething(anyInt); minTimes = 1; mock.setSomethingElse('a'); mock.setSomething(anyInt); maxTimes = 1; mock.editABunchMoreStuff(); minTimes = 0; maxTimes = 5; mock.notifyBeforeSave(); mock.save(); times = 1; }}; } }