单元测试、构建配置和内部结构

Unit Tests, Build Configuration and Internals

我正在将我的单元测试写在一个独立于我的被测项目的项目中。为了能够测试 Internal classes/members 我在我的待测项目中使用 [InternalsVisibleTo] 属性。

#if "BUILD_CONFIGURATION"
[assembly: InternalsVisibleTo("Tests_ProjectUnderTest")]
#endif

出现以下问题:

单元测试应该使用哪种构建配置? Internals 不应该在我发布的代码中可见,所以 #if RELEASE 是不可能的。另一方面 #if DEBUG 并没有真正测试我想要发布的内容。 你应该有一个独特的 UNIT_TEST-配置吗?或者 would/do 你是怎么做到的?

我通常不会将 [InternalsVisibleTo()] 属性设置为有条件的,因为内部结构只对指定的程序集可见。您可以通过强命名程序集来增强它的安全性,这样就没有人可以 'fake' 您的单元测试程序集。但是,如果您 that 担心这个,您可能应该混淆您的程序集,否则逆向工程是微不足道的。我通常认为 private/internal 是一种意图声明而不是安全功能,因为它总是可以使用反射来规避。

我通常对我的调试配置进行单元测试,因为我想在我的单元测试结果中看到诊断输出。这可能取决于您使用的是哪个运行器,我使用的是 ReSharper 运行器,它将 debug/trace 输出捕获到单元测试 window 中。由于在我的发布版本中减少了跟踪的详细程度,我更喜欢对调试版本进行单元测试。不过,我认为这是一个判断电话。