拜托,我在这里搜索它,但无法正确执行。
所以我有一个函数返回给我的排序数字的vector
。然后我尝试为这个 vector 创建一个使用测试。
这是我现在拥有的:
#include "stdafx.h"
#include "CppUnitTest.h"
#include "Finder.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace FinderUnitTest
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
Finder f;
std::vector<int> v1 = f.find_words();
//find_words(); is working okay without tests
for (int i=0;i<1;i++)
Assert::AreEqual(57,v1[i]);
}
};
}
真的没关系,for
有多少次。我想得到单元测试没有错误,我现在有一个,它是:
Message: Invalid parameter detected in function std::vector >::operator [], c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.12.25827\include\vector line 1795. Expression: "vector subscript out of range"
当我构建我的两个项目时,我的函数(返回排序数字的 vector )没有任何数据,因为当我运行测试时,它是空的。我说得对吗?
我只想将 vector 的前两个数字与 57
进行比较。
最佳答案
如果您希望 find_words 返回类似 [57, 57, ...] 的 vector ,那么此测试应该会失败。但是,它不应该出错,而应该断言。你想修复你的检查,以便他们将问题检测为断言违规。
Finder f;
std::vector<int> v1 = f.find_words();
Assert::IsTrue(v1.size() >= 2); // there are at least two entries
Assert::AreEqual(57,v1[0]); // the first is 57
Assert::AreEqual(57,v1[1]); // the second is 57
我看不出你在哪里给 finder 任何东西来搜索,但如果你说它应该找到 57,那你就是老板。请务必检查一下。一旦单元测试给出此断言,单元测试就完成了它的工作,您可以返回并查看您是否为 Finder 提供了正确的输入,或者 Finder 中是否存在错误。
X21 的评论是关于如何检测和避免崩溃的良好编程实践。它通过根本不检查值来修复崩溃,因为这样做会出错。它不是针对编写单元测试的。单元测试必须检测并断言输出不是您所期望的。在测试中崩溃总比根本不检查要好。
关于c++ - vector 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48977246/