.NET条件编译器符号和单元测试库

时间:2009-10-20 04:26:08

标签: .net unit-testing aop postsharp conditional-compilation

我的团队有一组针对我们的应用程序代码运行的单元测试库 - 不幸的是他们抛出(意外)异常。原因是我们正在调用我们的日志代码并且没有设置对象。日志代码通过我们使用PostSharp设置的方法属性执行(在方法体执行之前和之后调用)。不应该调用该属性。

这是PostSharp帮助我们的地方:它寻找条件编译器指令(SKIPPOSTSHARP),告诉它不要执行。换句话说,如果我们在执行单元测试时定义指令,那么我们就能够独立于日志记录方面测试所需的代码 - 成功避免不必要的依赖关系和复杂的模拟代码。

这很棒!除了一个捕获...为我们的测试项目定义的条件编译器指令不会被正在测试的项目定义 - 这意味着我们的测试代码仍然使用该属性,我们的测试都失败了。

是否可以仅在运行单元测试时在整个解决方案中定义编译器指令?即使我们没有将它应用于整个解决方案,只有当我们运行单元测试时,指令才能应用于特定项目(这也同样适用)?

我也有兴趣看到关于这种方法的意见(我们试图通过AOP代码实现分离和可扩展性,但似乎有一些额外的环节让我们在进步时跳过)。 / p>

注意:我不是说集成测试只是单元测试。我们只想测试特定的单元,我们不关心日志代码是否有效 - 通过其他单元测试(可以正常工作)进行测试。

1 个答案:

答案 0 :(得分:3)

我建议为测试创建一个特殊的构建配置。可能有一些方法可以检测项目是否由于执行单元测试而构建(可能是某些MSBuild属性),但在增量构建方案中它是不可靠的。