testtools/micromock/unittests/micromocktest/micromockcallcomparisonunittests.cpp (119 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"
using namespace std;
TYPED_MOCK_CLASS(CTestAllArgsMock, CMock)
{
public:
MOCK_METHOD_0(, UINT8, TestFunctionWithNoArgs);
MOCK_METHOD_END(UINT8, 0)
MOCK_METHOD_1(, UINT8, TestFunctionWith1Arg, UINT8, arg1);
MOCK_METHOD_END(UINT8, 0)
MOCK_METHOD_2(, UINT8, TestFunctionWith2Args, UINT8, arg1, UINT8, arg2);
MOCK_METHOD_END(UINT8, 0)
MOCK_METHOD_3(, UINT8, TestFunctionWith3Args, UINT8, arg1, UINT8, arg2, UINT8, arg3);
MOCK_METHOD_END(UINT8, 0)
MOCK_METHOD_4(, UINT8, TestFunctionWith4Args, UINT8, arg1, UINT8, arg2, UINT8, arg3, UINT8, arg4);
MOCK_METHOD_END(UINT8, 0)
MOCK_METHOD_5(, UINT8, TestFunctionWith5Args, UINT8, arg1, UINT8, arg2, UINT8, arg3, UINT8, arg4, UINT8, arg5);
MOCK_METHOD_END(UINT8, 0)
MOCK_METHOD_6(, UINT8, TestFunctionWith6Args, UINT8, arg1, UINT8, arg2, UINT8, arg3, UINT8, arg4, UINT8, arg5, UINT8, arg6);
MOCK_METHOD_END(UINT8, 0)
};
static MICROMOCK_MUTEX_HANDLE g_testByTest;
static MICROMOCK_GLOBAL_SEMAPHORE_HANDLE g_dllByDll;
BEGIN_TEST_SUITE(MicroMockCallComparisonUnitTests)
// GetUnexpectedCalls
TEST_SUITE_INITIALIZE(TestClassInitialize)
{
g_testByTest = MicroMockCreateMutex();
ASSERT_IS_NOT_NULL(g_testByTest);
}
TEST_SUITE_CLEANUP(TestClassCleanup)
{
MicroMockDestroyMutex(g_testByTest);
}
TEST_FUNCTION_INITIALIZE(TestMethodInitialize)
{
if (!MicroMockAcquireMutex(g_testByTest))
{
ASSERT_FAIL("our mutex is ABANDONED. Failure in test framework");
}
}
TEST_FUNCTION_CLEANUP(TestMethodCleanup)
{
if (!MicroMockReleaseMutex(g_testByTest))
{
ASSERT_FAIL("failure in test framework at ReleaseMutex");
}
}
TEST_FUNCTION(MicroMock_GetUnexpectedCalls_When_No_Actual_Call_Is_Made_Returns_An_Empty_String)
{
// arrange
CTestAllArgsMock testMock;
// act
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("")).c_str(), testMock.GetUnexpectedCalls().c_str(),
_T("Incorrect actual calls"));
}
TEST_FUNCTION(MicroMock_GetUnexpectedCalls_Returns_Unexpected_Calls)
{
// arrange
CTestAllArgsMock testMock;
// act
testMock.TestFunctionWithNoArgs();
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("[TestFunctionWithNoArgs()]")).c_str(), testMock.GetUnexpectedCalls().c_str(),
_T("Incorrect actual calls"));
}
TEST_FUNCTION(MicroMock_GetUnexpectedCalls_When_An_Expected_Call_And_An_Actual_Call_Match_Returns_Empty_String)
{
// arrange
CTestAllArgsMock testMock;
STRICT_EXPECTED_CALL(testMock, TestFunctionWithNoArgs());
// act
testMock.TestFunctionWithNoArgs();
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("")).c_str(), testMock.GetUnexpectedCalls().c_str(),
_T("Incorrect actual calls"));
}
TEST_FUNCTION(MicroMock_GetUnexpectedCalls_When_Only_The_Expected_Call_Happens_Returns_Empty_String)
{
// arrange
CTestAllArgsMock testMock;
STRICT_EXPECTED_CALL(testMock, TestFunctionWithNoArgs());
// act
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("")).c_str(), testMock.GetUnexpectedCalls().c_str(),
_T("Incorrect actual calls"));
}
TEST_FUNCTION(MicroMock_GetUnexpectedCalls_When_More_Than_One_Unexpected_Calls_Are_Made_Reports_All_Calls)
{
// arrange
CTestAllArgsMock testMock;
// act
testMock.TestFunctionWithNoArgs();
testMock.TestFunctionWithNoArgs();
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("[TestFunctionWithNoArgs()][TestFunctionWithNoArgs()]")).c_str(), testMock.GetUnexpectedCalls().c_str(),
_T("Incorrect actual calls"));
}
// GetMissingCalls
TEST_FUNCTION(MicroMock_GetMissingCalls_When_No_Expected_Call_Is_Programmed_Returns_An_Empty_String)
{
// arrange
CTestAllArgsMock testMock;
// act
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("")).c_str(), testMock.GetMissingCalls().c_str(),
_T("Incorrect actual calls"));
}
TEST_FUNCTION(MicroMock_GetMissingCalls_Returns_MissingCalls)
{
// arrange
CTestAllArgsMock testMock;
STRICT_EXPECTED_CALL(testMock, TestFunctionWithNoArgs());
// act
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("[TestFunctionWithNoArgs()]")).c_str(), testMock.GetMissingCalls().c_str(),
_T("Incorrect actual calls"));
}
TEST_FUNCTION(MicroMock_GetMissingCalls_When_An_Expected_Call_And_An_Actual_Call_Match_Returns_Empty_String)
{
// arrange
CTestAllArgsMock testMock;
STRICT_EXPECTED_CALL(testMock, TestFunctionWithNoArgs());
// act
testMock.TestFunctionWithNoArgs();
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("")).c_str(), testMock.GetMissingCalls().c_str(),
_T("Incorrect actual calls"));
}
TEST_FUNCTION(MicroMock_GetMissingCalls_When_Only_The_Actual_Call_Happens_Returns_Empty_String)
{
// arrange
CTestAllArgsMock testMock;
// act
testMock.TestFunctionWithNoArgs();
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("")).c_str(), testMock.GetMissingCalls().c_str(),
_T("Incorrect actual calls"));
}
TEST_FUNCTION(MicroMock_GetMissingCalls_When_More_Than_One_Missing_Calls_Exists_Reports_All_Missing_Calls)
{
// arrange
CTestAllArgsMock testMock;
STRICT_EXPECTED_CALL(testMock, TestFunctionWithNoArgs());
STRICT_EXPECTED_CALL(testMock, TestFunctionWithNoArgs());
// act
// assert
ASSERT_ARE_EQUAL_WITH_MSG(char_ptr, tstring(_T("[TestFunctionWithNoArgs()][TestFunctionWithNoArgs()]")).c_str(), testMock.GetMissingCalls().c_str(),
_T("Incorrect actual calls"));
}
END_TEST_SUITE(MicroMockCallComparisonUnitTests);