Собственный тест Microsoft C ++ не выполняется Assert :: AreSame, даже если значения совпадают - PullRequest
0 голосов
/ 05 марта 2020

Я запускаю тест с собственной структурой модульного тестирования Microsoft (которая поставляется с vs2019), и это не получается с этим сообщением: Assert failed. Expected:<1> Actual:<1>

Вот код теста:

TEST_METHOD(memory_copy)
{
    int ref[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int src[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int dest[10];

    test::memory_copy<int>(src, dest, 10);

    for (unsigned int i = 0; i < 10; i++)
    {
        Assert::AreSame(src[i], ref[i]);
        Assert::AreSame(dest[i], ref[i]);
    }
};

Примечание: memory_copy<>() копирует память из одного указателя в другой, как std::memcpy()

У кого-нибудь есть идея, в чем здесь проблема?

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Assert::AreSame() проверяет, относятся ли входы к одному и тому же объекту ; он не сравнивает значения.

Реализация функции (из CppUnitTestAssert.h) выглядит следующим образом:

template<typename T> static void AreSame(const T& expected, const T& actual, const wchar_t* message = NULL, const __LineInfo* pLineInfo = NULL)
{
    FailOnCondition(&expected == &actual, EQUALS_MESSAGE(expected, actual, message), pLineInfo);
}

То, что вы можете увидеть здесь, - это сравнение адресов памяти, в отличие от содержимого. Assert::AreEqual, с другой стороны, сравнивает объекты на равенство.

template<typename T> static void AreEqual(const T& expected, const T& actual, const wchar_t* message = NULL, const __LineInfo* pLineInfo = NULL)
{
    FailOnCondition(expected == actual, EQUALS_MESSAGE(expected, actual, message), pLineInfo);
}
0 голосов
/ 05 марта 2020

Оказывается, что Assert::AreSame() не делает то, что я ожидал. Изменив его на Assert::AreEqual(), я решил проблему. Более подробная информация здесь:

Документация Microsoft по AreEqual ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...