1

直接问题:我必须在我的工作区中有两个项目来测试一个应用程序吗?一个用于应用程序,另一个用于单元测试。或者我可以只有一个项目吗?

问题描述:现在我正在使用 MinGW 在 Eclipse C++ 中编写一个小应用程序,我想使用 Boost Test 库和 C/C++ 单元对其进行测试。我已经阅读了手册和教程,他们说 Boost 创建了一个主要功能。这意味着我必须有 2 个不同的项目(一个是应用程序,另一个是测试)。但是在这种情况下,当我对代码进行更改时,我必须执行两次(在两个项目中)。它看起来很烦人,所以我坚持认为也许我错了,并且有一种方法可以直接在单元测试中使用来自应用程序的源代码,可能是一个独特的项目或单元测试项目的一些特定配置。

有人有想法吗?

非常感谢!

4

2 回答 2

3

First, you can put all your tests in the same project as the code, but this may not be the best plan. Your main function would have to take arguments to switch between test and actual behaviour.

I often end up with three projects: A library, my main exe and the test project. You could just add the same cpp files to the tests and the main exe if you don't want to make a third project, but in the long run making a third library project may be sensible.

Second, you can build boost test so that you can write your own main if you want. If you are changing identical code twice this is asking for trouble. If you are trying to maintain a copy of the code in order to test it you are going to make a mistake. Don't do it.

于 2013-10-14T09:53:55.250 回答
1

你所描述的是一个真正等待发生的灾难的问题。您的单元测试需要测试应用程序的代码,而不是应用程序代码的副本。但是你也不应该把它们拼凑成一个项目。

想想将测试包含在主代码中所带来的坏事。您可能会遇到名称冲突,您的单元测试可能会意外链接到生产可执行文件中并随其一起提供,并且您可能会执行一些完全使测试合法性无效的做法,例如像 #ifdef UNIT_TESTor之类的语句if (testing == true) {...}。如果您的单元测试没有测试您实际编译并准备好发布的生产代码,那么它们就无法帮助您证明您的代码已准备好生产。

相反,您应该强烈希望拥有一种使您的代码易于理解、易于测试、易于构建和易于维护的项目组织。为此,您应该需要单独的项目来隔离您的代码、单元测试和生产包装器。

我强烈建议按照医生的建议实现一个包含所有程序逻辑的更大的库项目,然后创建一个单独的项目,其中包含一个非常薄的main()函数,该函数只调用你真正逻辑所在的静态库。然后创建包含所有单元测试的第三个项目。测试项目需要链接到您的库中,此外它还应该包含自己main()的以执行测试。

使用这种结构,您的解决方案的一个构建应该为您做几件事。它将首先编译库,然后编译并链接单元测试,然后运行您的单元测试,只有当它们都通过时,它才会编译并将生产项目与您的库链接。这样的组织结构使您的代码非常容易测试(它会在每次构建时测试自己!)并且构建非常高效(您只需构建一次逻辑和测试),此外它还可以帮助所有开发人员了解在哪里定位测试与. 在哪里找到代码。

于 2013-10-16T18:29:40.737 回答