Как утверждать, что два вектора равны в рамках CppUnitTest - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь установить двухмерные векторы, как показано ниже

TEST_METHOD(TestCase1)
{
    std::vector<int> arr{2};
    int sum{ 2 };
    std::vector<std::vector<int>> subsets;
    std::vector<std::vector<int>> expected{ {2} };
    generate_subsets(subsets, arr, sum);
    Assert::AreEqual<std::vector<std::vector<int>>>(subsets, expected);
}

Но это показывает ошибку, как показано ниже

Error - C2338 Test writer must define specialization of ToString<const Q& q> for your class class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > __cdecl Microsoft::VisualStudio::CppUnitTestFramework::ToString<class std::vector<class std::vector<int,class…

Любое предложение будет очень полезно.

1 Ответ

0 голосов
/ 05 февраля 2020

Assert::AreEqual хочет преобразовать значения в std::wstring для отображения в случае сбоя, то есть:

Assert failed. Expected:<some value> Actual:<some other value>

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

Быстрое решение состоит в том, чтобы вместо этого использовать Assert::IsTrue, поскольку он не будет пытаться преобразовать значения в строки:

Assert::IsTrue(subsets == expected, L"Unexpected value for <subsets>);

Если вы собираетесь сравнивать эти типы a Если вы хотите, чтобы Assert::AreEqual показывал действительные значения при неудачном завершении теста, вы можете сделать то, что предлагает сообщение компиляции, и создать переопределение ToString для этого указанного c типа:

#include <CppUnitTestAssert.h>

namespace Microsoft {
    namespace VisualStudio {
        namespace CppUnitTestFramework {
            template<> static inline std::wstring ToString(const std::vector<std::vector<int>> &object)
            {
                // Insert some code here to convert <object> to wstring
                return std::wstring();
            }
        }
    }
}
...