我正在接手一个通过ATL公开组件的项目。
我看到这种设置需要进行两个主要领域的单元测试:
1. 测试内部组件(可能会通过COM公开或不公开); 2. 测试外部公开的组件(即测试公开接口)。
目前,该项目的所有内部组件单元测试都在解决方案中。通过预处理器标志启用它们,并在运行时执行。
从我所做的研究来看,似乎“惯例”是将单元测试放置在不同的子项目中,并让主解决方案提供钩子以便单元测试可以访问内部组件。使用这种设置,单元测试解决方案将对待测试的解决方案产生依赖。这真是“惯例”,还是有很多人将他们的单元测试框架放在被测试的解决方案中(即单元测试不是子项目,而是松散的cpp文件,如果未提供预处理器标志,则将其排除在外)?
当前使用的单元测试框架似乎是cppunit,我正在考虑将其切换到gtest并尝试将一切移动到不同的子项目中,但我想确保长期而言这个努力值得。其中一种方法是使用__declspec声明要测试的类,只有在指定了预处理器定义时才公开它们。然后,单独的单元测试子项目将启用该预处理器,告诉主解决方案公开内部组件。我只是不确定这是否是最佳路线。
所以我的问题是:
1. 惯例是将单元测试放在一个单独的(子)项目中,并从将要测试的源代码中公开组件(通过钩子、公开类定义等)吗? 2. 从COM DLL中公开内部组件的最佳方法是什么? 3. 启用__declspec来测试内部组件的预处理器标志是个坏主意吗?其他人是否使用过这种方式进行单元测试,其中被测试的项在正常操作期间通常不公开?
感谢您的评论!
我看到这种设置需要进行两个主要领域的单元测试:
1. 测试内部组件(可能会通过COM公开或不公开); 2. 测试外部公开的组件(即测试公开接口)。
目前,该项目的所有内部组件单元测试都在解决方案中。通过预处理器标志启用它们,并在运行时执行。
从我所做的研究来看,似乎“惯例”是将单元测试放置在不同的子项目中,并让主解决方案提供钩子以便单元测试可以访问内部组件。使用这种设置,单元测试解决方案将对待测试的解决方案产生依赖。这真是“惯例”,还是有很多人将他们的单元测试框架放在被测试的解决方案中(即单元测试不是子项目,而是松散的cpp文件,如果未提供预处理器标志,则将其排除在外)?
当前使用的单元测试框架似乎是cppunit,我正在考虑将其切换到gtest并尝试将一切移动到不同的子项目中,但我想确保长期而言这个努力值得。其中一种方法是使用__declspec声明要测试的类,只有在指定了预处理器定义时才公开它们。然后,单独的单元测试子项目将启用该预处理器,告诉主解决方案公开内部组件。我只是不确定这是否是最佳路线。
所以我的问题是:
1. 惯例是将单元测试放在一个单独的(子)项目中,并从将要测试的源代码中公开组件(通过钩子、公开类定义等)吗? 2. 从COM DLL中公开内部组件的最佳方法是什么? 3. 启用__declspec来测试内部组件的预处理器标志是个坏主意吗?其他人是否使用过这种方式进行单元测试,其中被测试的项在正常操作期间通常不公开?
感谢您的评论!