矢量的单元测试

时间:2018-02-25 18:59:10

标签: c++ unit-testing

拜托,我在这里搜索,但无法正确完成。

所以我有一个函数可以返回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进行比较。

1 个答案:

答案 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的评论是关于如何检测和避免崩溃的良好编程实践。它通过不检查值来修复崩溃,因为这样做会是一个错误。它不是针对编写单元测试。单元测试必须检测并断言何时输出不符合您的预期。在测试中,崩溃会比不检查更好。