我有一个[TestMethod]
,它使用Sql Server表作为其[DataSource]
。我在该测试方法上也有一个自定义属性,可以在数据库中执行某些操作。
此自定义属性如下所示:
[AttributeUsage(System.AttributeTargets.Method)]
public class CustomAttribute : System.Attribute
{
public CustomAttribute(int number)
{
//do stuff with number
}
}
整个测试方法如下:
[TestMethod]
[CustomAttribute(10)] //This value is different in each test method
[DataSource(connectionStuff)] //This returns 4 rows
public void Test(){
//do test
}
当我运行测试并跟踪CustomAttribute中正在进行的操作时,它的构造函数被调用了60次,这比我预期的要多56倍。
我将此添加到要调试的属性:
[AttributeUsage(System.AttributeTargets.Method)]
public class CustomAttribute : System.Attribute
{
static bool check = false;
public CustomAttribute(int number)
{
if(check) return;
check = true;
//do stuff with number
}
}
现在,构造函数的其余部分仅运行4次,如最初预期的那样。
有人可以向我解释这里发生了什么吗?
答案 0 :(得分:0)
创建类型时,一次评估成员属性。因此,当您的测试类是第一次引用时,将创建类型,并评估所有[CustomAttribute]
调用。这与调用哪种方法无关,即无论执行哪种测试方法。
.NET中的属性只是元数据,附加到类型或成员。它们不是要修改成员,也不是在访问成员时调用。所以你绝对不应该让他们做任何东西。您只应将它们用于存储信息。