问题标签 [unittest++]
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.
c++ - 如何在 Windows 上使用命令行运行 UnitTest++
我是 UnitTest++ 的新手,我在使用 Windows 上的命令行使其工作时遇到问题(我需要它只能使用命令行工作)。
我已经构建了解决方案并且我有库(UnitTest++.vsnet2005),但是当我尝试构建它时,它显示“UnitTest++.h:没有这样的文件或目录”。
这是我正在使用的命令: g++ -o TestRowMajor TestRowMajor.cpp -L"C:\Users\myUser\Documents\Proyects\Tools Tests\UnitTest++\tests\unit" -lUnitTest++
这是我要测试的简单代码,是他们网站上的代码
任何帮助将不胜感激,在此先感谢。
unit-testing - 与 UnitTest++ 链接错误
使用 Xcode 作为我的 ide,我收到一个奇怪的 Unit Test ++ 链接错误。现在我确实为项目设置了两个目标。一个目标将进行测试,另一个目标暂时什么都不做。
请注意,我确实链接了库并运行了教程中的简单工作示例。我使用来自 macports 的 gcc 4.2.1 编译它。
“std::string::c_str() const”,引用自:UnitTest::MemoryOutStream::GetText() const in libUnitTest++.a(MemoryOutStream.o) “std::basic_ostringstream, std::allocator >::str( ) const",引用自:UnitTest::MemoryOutStream::GetText() const in libUnitTest++.a(MemoryOutStream.o) "std::basic_ostream >::~basic_ostream()",引用自:construction vtable for std::ostream libUnitTest++.a(TestRunner.o) 中的 -in-UnitTest::MemoryOutStream 为 libUnitTest++.a(Test.o) 中的 std::ostream-in-UnitTest::MemoryOutStream 构造 vtable "std::basic_ostream >::~basic_ostream( )",引用自:libUnitTest++.a(TestRunner.o) 中 std::ostream-in-UnitTest::MemoryOutStream 的构造 vtable:: ostream-in-UnitTest:: 构造 vtablelibUnitTest++.a(Test.o) 中的 MemoryOutStream
c++ - 由宏创建的单元测试方法
我有一个用 C++ 编写的程序,为了确保在进行更改时不会破坏任何内容,我想添加单元测试。
在程序中,我们使用宏来创建某些经常使用的对象。这看起来像:
在包含切换点的类的标题中,我们调用宏
然后在包含开关点的类的构造函数中,我们执行以下操作:
现在我们可以使用mSwitchpointObject->getValue()
来获取这个对象的值了。所有这些都有效,但我无法为它创建单元测试,我使用的是 unittest++ 框架。我用这个测试试过:
但这给了我编译器错误:
我猜问题是宏创建了需要测试的代码的一部分,并且在创建这部分之前执行了单元测试,但是从 Aleguna 的回复中我知道这不是问题所在。
我应该如何为这样的代码编写测试?
g++ - UnitTest++ 和 g++ - 库的相对路径
我正在尝试让 UnitTest++ 在此目录树之后的项目中工作:
我正在尝试在项目目录中使用 g++ 进行编译。我的 test.cpp 文件包含 UnitTest++ 入门代码。
我尝试了以下方法:
如果我理解得很好, -L 就是给出静态库的路径。-l(小 L)用于库名称,-I(大写 i)用于包含路径。
我得到两个不同的结果。它要么告诉我它在 /usr/bin/ 中找不到该库???或者它告诉我有未定义的对 unittest::* 的引用。
是因为我提供了无法编译的库的相对路径吗?我是通过多个目录使用 g++ 的新手,我试图在让它在我的 Makefile 中工作之前了解它是如何工作的。
[编辑]:在链接库和头文件之前必须给出 test/test.cpp 参数。所以,这行得通:
c++ - 如何在测试运行程序可执行文件中链接来自静态库的测试?
我有一个这样组织的 Visual Studio 解决方案:
ProjectB 包含两个文件,如下所示:
和这个:
以及包含测试套件的几个文件,例如:
ProjectC 由一个文件组成:
我将测试和测试运行程序分开的原因是我有另一个项目,它使用相同的测试来分析代码覆盖率,我需要保持分开,因为它不是跨平台的,而测试运行程序是。
问题是,当我编译和运行 ProjectC 时,实际上没有运行任何测试(UnitTest++ 运行,但测试为零)。这是因为 ProjectC 不引用与来自 ProjectB 的测试相关的任何符号,因此链接器不会链接来自 ProjectB.lib 的目标文件。
我的理解是,如果 ProjectB 是可执行文件,我不会遇到这个问题(大概是因为链接器会链接所有目标文件),根据文档:
一般的想法是保留一个带有调用 RunAllTests() 的入口点的 Main.cpp 文件。
然后,您可以随意编译和链接新的 .cpp 文件,通常每个测试套件一个。
每个 Test*.cpp 文件都将包含一个或多个带有相关测试代码的 TEST 宏指令。Main.cpp 和 Test*.cpp 之间没有源代码级别的依赖关系,因为 TEST 宏处理 RunAllTests() 所需的注册和设置,以查找编译到同一最终可执行文件中的所有测试。
我怎样才能解决这个问题,而不必在 ProjectC 可以看到的头文件中声明所有测试(这会扼杀 UnitTest++ 的易用性)?我在 Visual Studio 中注意到的一种可能性是:
项目设置 > 配置属性 > 链接器 > 输入 > 强制符号引用
然而,每次我编写一个新的单元测试时,都必须添加每个符号是相当乏味的。有什么方法可以强制它包含 ProjectB.lib 的全部内容?或者也许是一些基于代码的解决方案?
编辑:我正在寻找的是这样的东西,但对于 Visual Studio。
linker-errors - 尝试使用 UnitTest++ 在测试中链接代码时出现链接器错误
所以我正在使用 Unittest++(1.4 版)
我已经尝试进行了几个虚拟测试(CHECK(true)和CHECK(false),它们工作正常。但是,一旦我尝试包含一些生产代码,链接器就会疯狂使用任何类或函数我为测试而包含的标题。
我的问题是:
- 这可能是由 UnitTest++ 中的任何内容引起的吗?
- 如何在 Code::Blocks 中设置我的代码或项目以消除此错误?
细节:
我以前使用过 java 和 C# 的单元测试,但我以前从未使用过基于 C++ 的单元测试包。我使用 Code::Blocks 12.11 作为我的 IDE,使用 GCC 4.6.2 作为编译器来完成我的工作。
我已将 UnitTest++ 解压缩到我的工具文件夹并按照http://wiki.codeblocks.org/index.php?title=UnitTesting上的教程中的说明对其进行编译,并成功构建了库文件。我已将库文件的位置添加到我的测试项目设置文件中的链接器搜索目录设置中。
被测代码在其自己的项目中编译得很好,但在从测试中调用时却不行。
我已经设置了我的项目,以便每个类都在自己的测试文件中进行测试。我有一个 main.cpp 将所有测试绑定在一起。
我正在尝试测试的一类是 CameraLeaf:
(我使用的搜索目录包括使用尖括号,但在 SO 上无法正确显示)
结果是:
我必须承认我对 C++ 的了解并不是一流的,但到目前为止我已经过得去。我不太清楚如何解决这个问题。单元测试位于项目的子目录中,应该可以通过搜索目录包含或使用 ../ 跳到生产代码所在的级别。据我所知,找到了代码,否则编译器会抛出一个找不到文件的错误。所以我得出结论,这一定是链接器错误。但是,这不是递归包含的情况,因为相机不需要 cameraleaf,测试也不需要来自 unittest++ 框架的东西。所以我现在有点不知所措。
背景故事:
这是我完成学士学位所必须完成的最后一项任务的一部分,这些版本是由教授这门课程的人推荐的,因为它最适合他提供的样板代码。显然,较新版本的 GCC 存在一些问题。我已经完成了大部分作业,但是我遇到了一些问题,所以我还是决定创建一些测试。
c++ - 这是 VS2012 的优化错误吗?
在这里完成 VS2010 到 2012 的更新,由于代码生成错误或编程错误,有几个单元测试失败,但我不确定是哪个。我发布的代码几乎等于原始代码,并且也重现了这些问题。
这是一个案例;所有类/实现都在单独的文件中。
以上内容位于 dll 中,并在 exe 中使用 unittest++ 进行了测试(CHECK_THROW
为了清楚起见,我扩展了宏,但并没有改变任何东西):
无论它是否是一个错误,是否有我可以立即使用的解决方法,或者一些关于如何避免这种情况的一般规则?
编辑添加的实现DoStuff()
,如果我调用它而不是DoIt()
没有问题!
编辑这应该排除 unittest 框架或任何其他代码存在问题的可能性,或者被 const 引用捕获,或者编译器不知道 runtime_error 源自异常;我扩展了 unittest 宏以显示它们的实际作用,并创建了一个仅包含以下源文件的新项目:
输出是not good
。
c++ - UnitTest++ crashes in iOS project in XCode
I appear to be getting crashes that are not caught by the C++ try { } catch { }
construct (or which indicate that exception handling itself has become broken) when I include the source for UnitTest++.
The code compiles fine without any errors, but on runtime I get various crashes.
For example, the FixturesWithThrowingDtorsAreFailures
built-in test fails with libc++abi.dylib: terminate called without an active exception
. What I found about this error is that it means something went wrong in the exception handling process.
Is this a peculiarity of the way that Obj-C++ works? Has anyone else tried to get UnitTest++ working?
c++ - AMOP的基本用法,C++中的Mocking函数
我正在使用广泛使用发送和接收套接字功能的服务器-客户端模型编写分布式项目。由于这些功能的行为取决于另一方(例如,如果它在服务器端,它需要客户端正常工作),我需要一些方法来独立于另一端测试每一端。到目前为止,我发现模拟函数可能是正确的方法。
此外,由于我在该项目中使用unittest++,我发现AMOP是最适合的模拟函数框架。然而,在阅读了AMOP库的文档后,我并不清楚它是如何工作的。
简而言之,我需要将单元测试文件中的sendto函数更改为 mock 函数,这样每当服务器内部调用sendto时,它就会调用我的 mock 函数。
macos - 如何在 Mac OS X 上使用 C++11 和 CMake 解决 UnitTest++ 链接器错误?
我正在尝试为使用 CMake 的 C++11 库编译测试。我在 Ubuntu 上使用 UnitTest++ 和 C++11 取得了成功,但是 Mac OS X 给了我链接器错误。
在 CMake 中,我的 APPLE 链接器标志和库如下所示:
用这个编译会给我链接器错误,例如:
这是完整的粘贴。