gpt4 book ai didi

c++ - 为什么 VS UnitTesting 框架中的 Assert::AreEqual 不能与 std::string 一起使用?

转载 作者:可可西里 更新时间:2023-11-01 18:27:30 24 4
gpt4 key购买 nike

我正在尝试对某些 C++ 代码进行单元测试,但遇到了一些麻烦。

我有类似于以下代码行的东西......

std::string s1 = obj->getName();
std::string s2 = "ExpectedName";
Assert::AreEqual(s1, s2, "Unexpected Object Name");

我收到以下编译器错误...

error C2665: 'Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual' :
none of the 15 overloads could convert all the argument types

它似乎应该与 the following overload 匹配:

AreEqual<(Of <(T>)>)(T, T, String) 

上面的重载是不是应该支持任何对象的模板重载,只要参数 1 和 2 是同一类型?还是我遗漏了什么?

还有其他方法可以完成这个 Assert 吗?

最佳答案

您正在尝试将托管单元测试框架与原生类型一起使用——如果不首先将对象编码为托管类型,这根本无法工作。

VS2012 现在带有一个 native C++ unit testing framework ;使用此框架,您的代码可以通过将 "Unexpected Object Name" 更改为宽字符串(前缀为 L)并调用 the following overload 来工作:

template<typename T> 
static void AreEqual(
const T& expected,
const T& actual,
const wchar_t* message = NULL,
const __LineInfo* pLineInfo = NULL)

关于c++ - 为什么 VS UnitTesting 框架中的 Assert::AreEqual 不能与 std::string 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12628927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com