如何在 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();
}
}
}
}
我正在尝试断言二维向量,如下所示
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();
}
}
}
}