问题标签 [microsoft-cpp-unit-test]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
100 浏览

templates - 带有模板化 TEST_CLASSes 的 CppUnitTestingFramework

首先,这里描述了一个具有类似目标的问题:C++ unit test testing, using template test class

这个问题是关于我尝试解决相同问题的。

使用 Microsoft CppUnitTestFramework,我们可以使用以下内容创建单元测试:

我想测试一组类似的测试(不使用 For 循环将所有 Asserts 放在一个中TEST_METHOD),所以我查看了TEST_CLASS宏:

这不能直接与模板一起使用 - 据我所知,没有办法指定一个className包含模板参数的值,该模板参数具有正确的编译语法。

结果,我尝试了以下操作:

这可以编译,在我看来它应该允许我TEST_METHOD在模板类中定义 s 的集合,然后只需实例化必要的枚举和常量值集合来设置它们(也许对其他参数使用某种构造函数)未来,虽然看着 CppUnitTest.h 让我想知道这是否可能是另一个问题......)

但是,该类永远不会出现在测试资源管理器中,并且尝试右键单击测试(在模板代码中)并单击“运行测试”会产生以下输出:

编辑:不确定最后一部分(“未找到要运行的测试”)的相关性 - 对普通测试(无用户端模板)执行相同操作会产生相同的输出。在特定测试之外单击会运行 .cpp 文件中的所有测试。也许我错误地使用了右键菜单。

0 投票
1 回答
908 浏览

assert - 如何在 CppUnitTest 框架中断言两个向量是否相等

我正在尝试断言二维向量,如下所示

但它显示如下错误

任何建议都会有很大帮助。

0 投票
2 回答
565 浏览

c++ - 比较枚举类型

我正在使用 Visual Studio 的 cpp 单元测试框架实现一些单元测试。我希望能够在测试中比较枚举,但总是会出现错误。

这是导致我出错的代码。

ent1 是一个枚举状态,而 ASSIGN_STATEMENT 也是来自同一个枚举的一个枚举状态。

不知道我应该如何为枚举字符串创建模板专业化..

0 投票
1 回答
357 浏览

c++ - 在 Visual Studio 2019 C++ 中使用 CPPUnitTest 编写“DivideByZero”单元测试用例时出现问题

单元测试意味着编写代码来验证应用程序或库的各个部分或单元。单元是应用程序的最小可测试部分。单元测试孤立地评估代码。在 C++ 中,这意味着为方法或函数编写测试。我正在编写一个基本的计算器程序并尝试使用 CPPUnitTest 在 Visual Studio 2019 中测试代码。之后我也必须在 Jenkins 中构建它。请不要判断..我是第一次写单元测试..这是我的Calculator.cpp

这是 Calc 类或“Calc.h” 在这里,我曾经std::runtime_error在除零时抛出错误

我正在尝试使用 CPPUnitTest 为我的代码编写单元测试。我已经编写了加减代码,assert::AreEqual但是对于除以零的条件,我不知道要编写测试用例。这是我的单元测试代码。

请帮我为此编写测试方法。我在某个地方读到CPPUNIT_ASSERT_THROW(cal->divide(12,0), std::runtime_error);过,但这在我的情况下不起作用。我该怎么做Assert::AreEqual 还建议我可以使用哪种其他方法来增加我的代码覆盖率。

0 投票
1 回答
184 浏览

c++ - 使用 gmock 和 CppUnitTestFramework 时访问冲突

我见过有人将 gmock 与 Microsoft 的 Cpp 单元测试框架一起使用,但是每当我尝试运行使用 EXPECT_CALL 宏的测试(参见下面的示例)时,我都会在 CppUnit 清理测试用例期间遇到访问冲突。如果我注释掉 EXPECT_CALL 宏,那么测试执行并且断言失败,因为默认的模拟值为 false。

该项目正在使用 C++20(必须对 gmock 进行一个小编辑以使用 std::invoke_result 而不是 std::result_of,但我不认为这是我痛苦的根源)。

关于我为什么会遇到这个问题的任何想法?

示例代码:

0 投票
1 回答
108 浏览

c++ - CppUnitTestFramework:在 TEST_CLASS_INITIALIZE 中设置的变量值不会在 TEST_METHOD 中保留

我在我的 TEST_CLASS 中有一个std::string声明,应该为要在其他两个 TEST_METHOD 中使用的类初始化一次。

但是,当 TEST_CLASS_INITIALIZE 被调用(它确实在任何 TEST_METHOD 之前运行)时,projectDirectory设置正确。然而,问题是当我调试projectDirectory每个 TEST_METHOD 中的值时,该值是一个空字符串 ("")。

我做错了什么?

PS 我确实看过这篇类似的帖子,但我的问题是 projectDirectory 是一个空字符串,即使是第一个使用该字符串的方法。

0 投票
0 回答
40 浏览

c++ - CppUnitTestFramework:测试方法失败,堆栈跟踪列出方法末尾的行号,调试测试通过

我知道,我知道 - 这个问题的标题到处都是。但是,我不确定这里可能是什么问题导致了我所看到的情况。

我在类Project中有以下正在单元测试的方法:

此方法的目标是解析任何文本文件的 ID 部分,基于匹配应用程序正在向其发布数据的端口号。

文件的格式是这样的:

在单独的 Visual Studio 项目中对各种方法(包括此Project::DetermineID方法)进行单元测试。

现在,当我运行测试时,DetermineID失败并且堆栈跟踪状态:

现在,在我的测试 .cpp 文件中,TEST_METHOD(DetermineID) {它位于第 86 行。但该方法}位于第 91 行,如堆栈跟踪所示。

并且,在调试时,单元测试通过了,因为返回xTEST_METHODtrue. 只有在单独运行测试或运行所有测试时,该测试方法才会失败。

一些可能相关的注释:

  • 这是一个单线程应用程序,没有安排任何任务(据说没有竞争条件)
  • 类中还有另一种方法,Project它也处理与std::ifstream此方法相同 的文件
    • 该方法有自己的测试方法,已编写并通过,没有任何问题
    • 测试方法也访问“normal.cfg”文件
  • 是的,this->port有一个赋值

因此,我的问题是:

  1. 为什么堆栈跟踪引用测试方法的右括号,而不是Assert据称失败的方法中的单个?
  2. 如何让单元测试在运行时通过?(因为它目前仅在我可以确认的调试过程中出现xtrue
  3. 如果问题是竞争条件,可能其他测试方法正在访问“normal.cfg”文件,为什么即使单独运行该方法,测试方法也会失败?

非常感谢这里的任何支持/帮助。谢谢!

0 投票
1 回答
92 浏览

c++ - 无法使用 Microsoft CppUnitTest 框架在 Visual Studio 2019 上运行测试

我有一个std::vector<Token> tokenize(const std::string& s)要进行单元测试的功能。该Token结构定义如下:

我已经设置了 CppUnitTest 并且可以进行玩具测试,例如1 + 1 == 2运行。但是当我尝试对我的tokenize函数运行测试时,它给了我这个错误:

我的测试代码是这样的:

是什么导致了错误,我该如何解决?

0 投票
0 回答
17 浏览

visual-c++ - 尝试在调试模式下运行 UnitTest 并在 CppUnitTest.h 文件中引发异常?

这是我运行的单元测试。它不会出错,但不会在测试中运行。但是,当我在调试模式下运行时,我在 VS 中得到以下异常:CppUnitTest.h:

在此处输入图像描述

0 投票
0 回答
34 浏览

c++ - CPPUnit 测试无法运行

我对 C++ 很陌生,正在尝试使用简单的 Add 函数进行 Microsoft CPPunit 测试。

参考下面的屏幕截图,当我单击全部运行时,我无法让测试工作。

Add 函数在 main 函数中工作正常,但是当尝试在 test cpp 文件中对其进行测试时,由于这些我不理解的错误消息,构建无法完成。 在此处输入图像描述

这是简单的添加函数:

我可以得到一些帮助和澄清。

谢谢:)