C++ 微软C++;即使值相同,本机测试也会失败Assert::AreName
我正在使用microsoft本机单元测试框架(vs2019附带)运行测试,测试失败,并显示以下消息:C++ 微软C++;即使值相同,本机测试也会失败Assert::AreName,c++,unit-testing,C++,Unit Testing,我正在使用microsoft本机单元测试框架(vs2019附带)运行测试,测试失败,并显示以下消息:Assert failed。预期值:实际值: 以下是测试代码: 测试方法(内存拷贝) { int-ref[10]={1,2,3,4,5,6,7,8,9,10}; int src[10]={1,2,3,4,5,6,7,8,9,10}; 国际目的地[10]; 测试:内存拷贝(src,dest,10); for(无符号整数i=0;i
Assert failed。预期值:实际值:
以下是测试代码:
测试方法(内存拷贝)
{
int-ref[10]={1,2,3,4,5,6,7,8,9,10};
int src[10]={1,2,3,4,5,6,7,8,9,10};
国际目的地[10];
测试:内存拷贝(src,dest,10);
for(无符号整数i=0;i<10;i++)
{
Assert::AreName(src[i],ref[i]);
断言::AreName(dest[i],ref[i]);
}
};
注意:memory\u copy()
将内存从一个指针复制到另一个指针,就像std::memcpy()
有人知道这里的问题是什么吗?事实证明,
断言::AreName()
没有达到我预期的效果。通过将其更改为Assert::AreEqual()
,我已经解决了这个问题。更多信息请点击此处:
事实证明,
断言::AreName()
并没有达到我预期的效果。通过将其更改为Assert::AreEqual()
,我已经解决了这个问题。更多信息请点击此处:
检查输入是否指向相同的对象;它不会比较这些值
该功能的实现(来自cppunitestassert.h
)如下所示:
template<typename T> static void AreSame(const T& expected, const T& actual, const wchar_t* message = NULL, const __LineInfo* pLineInfo = NULL)
{
FailOnCondition(&expected == &actual, EQUALS_MESSAGE(expected, actual, message), pLineInfo);
}
检查输入是否引用相同的对象;它不会比较这些值
该功能的实现(来自cppunitestassert.h
)如下所示:
template<typename T> static void AreSame(const T& expected, const T& actual, const wchar_t* message = NULL, const __LineInfo* pLineInfo = NULL)
{
FailOnCondition(&expected == &actual, EQUALS_MESSAGE(expected, actual, message), pLineInfo);
}
向我们展示
test::memory\u copy
实现,如果没有它,我们将无能为力。我已经确认test::memory\u copy是有效的。我也发现了这个问题。我马上就要发布答案了。我相信arame
检查的是内存地址,而不是值AreEqual
可能是您想要的。向我们展示test::memory\u copy
实现,没有它,我们就无能为力。我已经确认test::memory\u copy可以工作。我也发现了这个问题。我马上就要发布答案了。我相信arame
检查的是内存地址,而不是值AreEqual
可能是您想要的。虽然我们感谢您的回答,但如果它在其他答案的基础上提供附加值,那就更好了。在这种情况下,您的答案不会提供额外的价值,因为另一个用户已经发布了该解决方案。如果以前的答案对你有帮助,你应该投票表决,而不是重复相同的信息。这个答案在我已经投票并选择作为答案的答案之前发布。啊,对不起,我应该检查时间戳。尽管我们感谢你的回答,如果它能在其他答案的基础上提供额外的价值,那就更好了。在这种情况下,您的答案不会提供额外的价值,因为另一个用户已经发布了该解决方案。如果以前的答案对你有帮助,你应该投票支持它,而不是重复相同的信息。这个答案在我已经投票并选择作为答案的答案之前发布。啊,对不起-我应该检查时间戳。这真的是Areame
的完整实现吗?这可以通过重载操作符&
来实现。它应该改为使用std::addressof
。@walnut,是的。AreEqual
有几个重载,但是Areame
只有一个重载。我很惊讶它没有使用addressof
这真的是arame
的完整实现吗?这可以通过重载操作符&
来实现。它应该改为使用std::addressof
。@walnut,是的。AreEqual
有几个重载,但是Areame
只有一个重载。我很惊讶它没有使用addressof