assert - 如何在 CppUnitTest 框架中断言两个向量是否相等
问题描述
我正在尝试断言二维向量,如下所示
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();
}
}
}
}
推荐阅读
- django - 您如何使用 axios react 发布文件以及其他一些数据?
- slack-api - 如何在 Slack 中渲染表格
- java - 当一个map变量传递给不同实例的构造函数时,所有实例的成员变量都会更新为map的最新值
- r - 如何在我的 rbind 函数中将空值识别为“NA”?
- c# - 如何区分程序的 GUI 和控制台窗口?
- javascript - 添加一个带有复选框的行
- paradigms - 如何使用 mozart oz 中的标签从对/元组中获取元素?
- angular - Angular Guards 生命周期说明
- cannon.js - Cannon.js 铰链约束 - 电机:如何仅旋转一个主体
- javascript - 来自 LocalStorage 的表构建未更新