c++ - 你有吗?你如何进行 C++ 自动测试?

标签 c++ autotest

就autotest而言,如何对C++程序进行autotest?是否有任何自动测试框架可用于进行单元测试和集成测试?

最佳答案

你在说自动测试吗 Ruby Autotest ?如果是这样,也许Watchr会为你工作。是的,您需要在开发机器上安装 Ruby 运行时,但看起来它几乎可以触发文件系统更改时可以在命令行上完成的任何操作。例如,如果您希望 Watchr 在源代码树中的 .c/.cpp/.h/.hpp 文件更改时随时构建和运行 C++ 测试,您可以执行以下操作:

watch('src/(.*)\.[h|cpp|hpp|c]') {system "build/buildAndRunTests.bat"}

这个特定的命令显然对您的构建过程的设置方式做出了一些假设(显然您是在 Windows 上),但这应该是它的要点。我们的团队使用自动运行构建的单元测试二进制文件的构建后事件配置我们的单元测试项目,因此我们可以在 buildAndRunTests.bat 脚本中触发构建过程的那一部分并让它打印出来结果到命令行。它可能需要一些调整,但看起来 Watchr 可能是一个不错的选择。我会在试一试时更新此回复(希望是下周初)。

更新:我刚刚在我的一个 C# 项目中尝试了这个,并让它在那里工作。所以我理论上它也应该适用于 C++ 项目。

autotest.watchr:

watch('./.*/.*\.cs$') {system "cd build && buildAndRunTests.bat && cd ..\\"}

注意正则表达式末尾的 $。这很重要,因为在构建时源代码树中生成了很多工件,如果其中任何一个与字符串 .cs 匹配,它将触发另一次运行,有效地导致无限循环。可以想象,如果您在构建时生成/修改任何源文件,也会发生同样的事情,因此您可能必须找到一种补偿方法。

buildAndRunTests.bat:

pushd ..\
rem Build test project
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com" Tests.Unit\Tests.Unit.csproj /rebuild Release
popd

rem Navigate to the directory containing the built files
pushd ..\Tests.Unit\bin\Release
rem Run the tests through nunit-console
..\..\..\Dependencies\NUnit-2.5.5-bin\net-2.0\nunit-console.exe Tests.Unit.dll /run=Tests.Unit
popd

然后,在一个单独的控制台窗口中,只需导航到您的项目目录并运行以下命令(假设 autotest.watchr 位于项目树的顶部,见下文):

watchr autotest.watchr

现在,当源代码树中的任何 .cs 文件更改时,它将自动运行 buildAndRunTests.bat 脚本。这只是我本地机器上的一个例子,所以它可能无法在你的机器上一字不差地工作,但你应该能够根据你的需要对其进行调整。

这是供引用的目录结构:

/Project
  /build
    buildAndRunTests.bat
  /Tests.Unit
  /Dependencies
    /NUnit-2.5.5-bin
      /net-2.0
        nunit-console.exe
  autotest.watchr

希望对您有所帮助。

关于c++ - 你有吗?你如何进行 C++ 自动测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2914651/

相关文章:

python - 使用CFFI释放内存时 "MemoryError: Stack overflow"是什么意思?

android - 在未连接 USB 的情况下运行 UiAutomator 2.0 测试用例

java - 是否有类似 ZenTest/Autotest for Java 和 JUnit 的东西

ruby-on-rails - Rails 3 - 如何让 Rspec 规范/& 自动测试工作?

java - Selenium 中的通用字段初始化

ruby-on-rails - Autotest 和 Factory Girl 的验证问题

c++ - 使用查找表进行坐标转换

c++ - 在 C++ 中求解两个具有两个未知数的非线性方程

C++ 系统函数不接受字符串?

c++ - map 初始化 : object code is 50 times larger than source code