testtools/micromock/unittests/micromocktest/timediscretemicromocktestvoidvoid.cpp (93 lines of code) (raw):

// Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. #include "stdafx.h" void a(void); void b(void); TD_MOCK_CLASS(MyMocks) { public: MOCK_STATIC_TD_METHOD_0(, void, a) MOCK_VOID_METHOD_END() MOCK_STATIC_TD_METHOD_0(, void, b) MOCK_VOID_METHOD_END() }; DECLARE_GLOBAL_MOCK_METHOD_0(MyMocks, , void, a) DECLARE_GLOBAL_MOCK_METHOD_0(MyMocks, , void, b) static int iCall=0; static void theTask(void) { if(iCall==1) { a(); } if(iCall==10) { a(); b(); } iCall++; } static HANDLE g_hMutex=NULL; BEGIN_TEST_SUITE(MicroMockVoidVoidTest) TEST_SUITE_INITIALIZE(a) { g_hMutex = CreateMutex(NULL, FALSE, _T("onlyOneTestAtATime5")); ASSERT_ARE_NOT_EQUAL(HANDLE, (HANDLE)NULL, g_hMutex); } TEST_SUITE_CLEANUP(b) { if (g_hMutex != NULL) { CloseHandle(g_hMutex); g_hMutex = NULL; } } #pragma warning(disable: 26135) TEST_FUNCTION_INITIALIZE(c) { DWORD r = WaitForSingleObject(g_hMutex, INFINITE); if (r != WAIT_OBJECT_0) { ASSERT_FAIL(_T("WAitForSingleOPbject failed")); } iCall = 0; } TEST_FUNCTION_CLEANUP(d) { if (ReleaseMutex(g_hMutex) == 0) { ASSERT_FAIL(_T("ReleaseMutex(hOneByOne)==0")); } } TEST_FUNCTION(DiscreteMicroMock_ThereIsNothingCalledAtTimeZero) { // arrange MyMocks mocks(theTask); // act mocks.RunUntilTick(0); // assert - left to uMTD (test would fail if at time = 0 a() would be called*/ } TEST_FUNCTION(DiscreteMicroMock_AisCalledAtTimeOne) { // arrange MyMocks mocks(theTask); STRICT_EXPECTED_CALL_AT(mocks, 1, a()); // act mocks.RunUntilTick(1); // assert - left to uMTD - this test together with the test before guarantee that at t=1 precisely a() is called } TEST_FUNCTION(DiscreteMicroMock_AisNotCalledAtTimeTwo) { // arrange MyMocks mocks(theTask); STRICT_EXPECTED_CALL_AT(mocks, 1, a()); // act mocks.RunUntilTick(2); // assert - left to uMTD } TEST_FUNCTION(DiscreteMicroMock_InTheSameTickOrderOfCallsIsDisregarded_1) { ///arrange MyMocks mocks(theTask); STRICT_EXPECTED_CALL_AT(mocks, 1, a()); STRICT_EXPECTED_CALL_AT(mocks, 10, a()); STRICT_EXPECTED_CALL_AT(mocks, 10, b()); ///act mocks.RunUntilTick(20); ///assert - left to uM_TD } TEST_FUNCTION(DiscreteMicroMock_InTheSameTickOrderOfCallsIsDisregarded_2) { ///arrange MyMocks mocks(theTask); STRICT_EXPECTED_CALL_AT(mocks, 1, a()); STRICT_EXPECTED_CALL_AT(mocks, 10, b()); STRICT_EXPECTED_CALL_AT(mocks, 10, a()); ///act mocks.RunUntilTick(20); ///assert - left to uM_TD } END_TEST_SUITE(MicroMockVoidVoidTest)