如何在 CppUnitTest 框架中断言两个向量是否相等

How to assert if two vectors are equal in CppUnitTest framework

我正在尝试断言二维向量,如下所示

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…

任何建议都会有很大帮助。

Assert::AreEqual 想要将值转换为 std::wstring 以便在出现故障时显示,即:

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

编译器抱怨,因为没有针对您正在使用的类型的内置转换。

一个快速的解决方法是使用 Assert::IsTrue 代替,因为它不会尝试将值转换为字符串:

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

如果您要经常比较这些类型并希望 Assert::AreEqual 在测试失败时显示实际值,那么您可以按照编译消息的建议创建一个 ToString覆盖该特定类型:

#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();
            }
        }
    }
}