如何在运行测试时忽略方法属性?

时间:2016-04-07 13:14:11

标签: c#

我的方法用属性

进行修饰
[TraceAspect]
public void Post()
 {
 }

我想在测试/从测试项目中调用方法时跳过此属性执行。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:3)

属性不是可执行代码。它们只是元数据。

如果属性“做”某事,那是因为代码是在编译时根据属性修改的。我假设你正在使用像PostSharp这样的Aspect框架来为你处理这个问题。如果您对生成的DLL进行反编译,您将看到该属性已消失,并且您的方法的代码包含该方面添加的任何代码。

要找到避免这种情况的方法,您必须查阅方面框架的文档。但是,测试不同代码而不是实际运行代码并不是一个好主意 - 您可能希望查看其他解决方案,例如将跟踪重定向到其他地方或类似的东西。

可能有一些方法可以通过使用条件编译来避免这种情况,尽管它不能很好地工作。例如,您可以在构建服务器上设置一个变量来避免属性本身(#if !TESTING),或者处理从属性到代码的转换的构建任务。您可以使用不同的构建配置来创建包含和不包含转换的版本。但实际上,所有这些都非常难看。

答案 1 :(得分:1)

您可以创建一个额外的方法,并在具有属性的方法内调用该方法。所以你可以测试没有属性的方法。

[TraceAspect]
public void Post()
{
    PostWithoutAttr();
}

public void PostWithoutAttr() 
{
    ....
}