我正在接管一个通过 ATL 公开组件的项目。
我看到单元测试的两个主要领域需要通过这个设置来覆盖:
- 测试内部组件(可能会或可能不会通过 COM 公开)
- 测试外部暴露组件(也称为测试暴露接口)
目前,该项目在解决方案中包含其所有内部组件单元测试。它们由一个预处理器标志启用,该标志编译它并在您运行时执行。
从我一直在做的研究来看,“规范”似乎是将单元测试放在不同的子项目中,并让单元测试的主要解决方案提供挂钩以访问内部组件。使用此设置,单元测试解决方案将设置对正在测试的解决方案的依赖关系。这真的是“规范”吗,还是有很多人将他们的单元测试框架放在正在测试的解决方案中(又名单元测试不是子项目,而是松散的 cpp,#ifdef
如果未提供预处理器标志)?
目前使用的单元测试框架似乎是 cppunit,我正在考虑将其切换到 gtest 并尝试将所有内容移到不同的子项目中,但我想确保从长远来看,这些努力是值得的。
我想到的一种方法是__declspec
对要测试的类进行测试,并且仅在指定预处理器定义时才公开它们。然后,单独的单元测试子项目将使该预处理器能够告诉主要解决方案公开内部。我只是不确定这是否是最好的路线。
所以我的问题是:
- 是否将单元测试放在单独的(子)项目中并从将要测试的源中公开组件(通过钩子,公开类定义等)?
- 从 COM DLL 公开内部组件的最佳方式是什么?
__declspec
允许测试内部组件的预处理器标志会是一个坏主意吗?有没有其他人在他们的单元测试中做到这一点,在正常操作期间被测试的项目通常不会暴露?
感谢您的评论!