拜托,我在这里搜索,但无法正确完成。
所以我有一个函数可以返回vector
的sortig数字。然后我尝试为这个向量创建一个使用测试。
这就是我现在所拥有的:
#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
有多少时间。我想毫无错误地进行单元测试,我现在有一个,它是:
消息:在函数std :: vector&gt; :: operator [],c:\ program files(x86)\ microsoft visual studio \ 2017 \ community \ vc \ tools \ msvc \ 14.12.25827 \ include中检测到的参数无效\ vector line 1795.表达式:“向量下标超出范围”
当我构建我的两个项目时,如何获得它,我的功能,它返回排序数字的向量,没有任何数据,因为当我运行测试时,有空。我是对的吗?
我只想将我的矢量的两个第一个数字与57
进行比较。
答案 0 :(得分:1)
如果您希望find_words返回像[57,57,...]这样的向量,则此测试应该失败。但是,它不应该出错,而应该是Assert。您希望修复检查,以便将问题检测为断言违规。
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
我不知道你在哪里找到了搜索的东西,但如果你说它应该找到57,你就是老板。一定要检查一下。一旦unittest给出了这个断言,unittest就完成了它的工作,你可以回去查看你是否给了Finder正确的输入,或者Finder中是否有错误。
X21的评论是关于如何检测和避免崩溃的良好编程实践。它通过不检查值来修复崩溃,因为这样做会是一个错误。它不是针对编写单元测试。单元测试必须检测并断言何时输出不符合您的预期。在测试中,崩溃会比不检查更好。