c++ - vector 的单元测试

标签 c++ unit-testing

拜托,我在这里搜索它,但无法正确执行。

所以我有一个函数返回给我的排序数字的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/

相关文章:

unit-testing - 学习 F# : Is it possible to create a test case to verify a signature?

unit-testing - 卖给我单元测试

javascript - 如何使用 Jasmine 在 AngularJS 中测试 .catch Promise 返回?

c++ - Casablanca C++ REST SDK 中 web::json::value::parse 和 web::json::value::string 的区别

c++ - 什么是 ABI,为什么 C++ 没有标准的 ABI,如果有又有什么关系呢?

c++ - 为什么 std::filesystem::file_size 位于留给实现的目录上?

android - 如何在 Android 中的 Android 测试和单元测试之间共享 JSON 文件

javascript - 如何使 mongoose 在执行查找查询时失败

c++ - Direct 2D 在内存中留下指针吗?

c++ - 代码的有效性