我的方法用属性
进行修饰[TraceAspect]
public void Post()
{
}
我想在测试/从测试项目中调用方法时跳过此属性执行。有没有办法实现这个目标?
答案 0 :(得分:3)
属性不是可执行代码。它们只是元数据。
如果属性“做”某事,那是因为代码是在编译时根据属性修改的。我假设你正在使用像PostSharp这样的Aspect框架来为你处理这个问题。如果您对生成的DLL进行反编译,您将看到该属性已消失,并且您的方法的代码包含该方面添加的任何代码。
要找到避免这种情况的方法,您必须查阅方面框架的文档。但是,测试不同代码而不是实际运行代码并不是一个好主意 - 您可能希望查看其他解决方案,例如将跟踪重定向到其他地方或类似的东西。
可能有一些方法可以通过使用条件编译来避免这种情况,尽管它不能很好地工作。例如,您可以在构建服务器上设置一个变量来避免属性本身(#if !TESTING
),或者处理从属性到代码的转换的构建任务。您可以使用不同的构建配置来创建包含和不包含转换的版本。但实际上,所有这些都非常难看。
答案 1 :(得分:1)
您可以创建一个额外的方法,并在具有属性的方法内调用该方法。所以你可以测试没有属性的方法。
[TraceAspect]
public void Post()
{
PostWithoutAttr();
}
public void PostWithoutAttr()
{
....
}