问题标签 [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.
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 文件中的所有测试。也许我错误地使用了右键菜单。
assert - 如何在 CppUnitTest 框架中断言两个向量是否相等
我正在尝试断言二维向量,如下所示
但它显示如下错误
任何建议都会有很大帮助。
c++ - 比较枚举类型
我正在使用 Visual Studio 的 cpp 单元测试框架实现一些单元测试。我希望能够在测试中比较枚举,但总是会出现错误。
这是导致我出错的代码。
ent1 是一个枚举状态,而 ASSIGN_STATEMENT 也是来自同一个枚举的一个枚举状态。
不知道我应该如何为枚举字符串创建模板专业化..
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
还建议我可以使用哪种其他方法来增加我的代码覆盖率。
c++ - 使用 gmock 和 CppUnitTestFramework 时访问冲突
我见过有人将 gmock 与 Microsoft 的 Cpp 单元测试框架一起使用,但是每当我尝试运行使用 EXPECT_CALL 宏的测试(参见下面的示例)时,我都会在 CppUnit 清理测试用例期间遇到访问冲突。如果我注释掉 EXPECT_CALL 宏,那么测试执行并且断言失败,因为默认的模拟值为 false。
该项目正在使用 C++20(必须对 gmock 进行一个小编辑以使用 std::invoke_result 而不是 std::result_of,但我不认为这是我痛苦的根源)。
关于我为什么会遇到这个问题的任何想法?
示例代码:
c++ - CppUnitTestFramework:在 TEST_CLASS_INITIALIZE 中设置的变量值不会在 TEST_METHOD 中保留
我在我的 TEST_CLASS 中有一个std::string
声明,应该为要在其他两个 TEST_METHOD 中使用的类初始化一次。
但是,当 TEST_CLASS_INITIALIZE 被调用(它确实在任何 TEST_METHOD 之前运行)时,projectDirectory
设置正确。然而,问题是当我调试projectDirectory
每个 TEST_METHOD 中的值时,该值是一个空字符串 ("")。
我做错了什么?
PS 我确实看过这篇类似的帖子,但我的问题是 projectDirectory 是一个空字符串,即使是第一个使用该字符串的方法。
c++ - CppUnitTestFramework:测试方法失败,堆栈跟踪列出方法末尾的行号,调试测试通过
我知道,我知道 - 这个问题的标题到处都是。但是,我不确定这里可能是什么问题导致了我所看到的情况。
我在类Project
中有以下正在单元测试的方法:
此方法的目标是解析任何文本文件的 ID 部分,基于匹配应用程序正在向其发布数据的端口号。
文件的格式是这样的:
在单独的 Visual Studio 项目中对各种方法(包括此Project::DetermineID
方法)进行单元测试。
现在,当我运行测试时,DetermineID
失败并且堆栈跟踪状态:
现在,在我的测试 .cpp 文件中,TEST_METHOD(DetermineID) {
它位于第 86 行。但该方法}
位于第 91 行,如堆栈跟踪所示。
并且,在调试时,单元测试通过了,因为返回x
的TEST_METHOD
是true
. 只有在单独运行测试或运行所有测试时,该测试方法才会失败。
一些可能相关的注释:
- 这是一个单线程应用程序,没有安排任何任务(据说没有竞争条件)
- 类中还有另一种方法,
Project
它也处理与std::ifstream
此方法相同 的文件- 该方法有自己的测试方法,已编写并通过,没有任何问题
- 测试方法也访问“normal.cfg”文件
- 是的,
this->port
有一个赋值
因此,我的问题是:
- 为什么堆栈跟踪引用测试方法的右括号,而不是
Assert
据称失败的方法中的单个? - 如何让单元测试在运行时通过?(因为它目前仅在我可以确认的调试过程中出现
x
)true
。 - 如果问题是竞争条件,可能其他测试方法正在访问“normal.cfg”文件,为什么即使单独运行该方法,测试方法也会失败?
非常感谢这里的任何支持/帮助。谢谢!
c++ - 无法使用 Microsoft CppUnitTest 框架在 Visual Studio 2019 上运行测试
我有一个std::vector<Token> tokenize(const std::string& s)
要进行单元测试的功能。该Token
结构定义如下:
我已经设置了 CppUnitTest 并且可以进行玩具测试,例如1 + 1 == 2
运行。但是当我尝试对我的tokenize
函数运行测试时,它给了我这个错误:
我的测试代码是这样的:
是什么导致了错误,我该如何解决?