我想在[TestInitialize]方法中初始化常用的变量,但我不想为每个测试方法初始化相同的变量。有没有办法通过装饰器或类似的东西来区分测试方法?例如
[TestInitialize]
public Setup()
{
//pseudocode
if VariablesContainLetters
var1 = a; var2 = b; var3 = c;
else if VariablesContainNumbers
var4 = 1; var5 = 2; var6 = 3;
}
[TestMethod]
[VariablesContainLetters]
public method1() {}
[TestMethod]
[VariablesContainNumbers]
public method2() {}
这样我可以为不同的TestMethods初始化不同的变量吗?
答案 0 :(得分:2)
这是我认为你想要完成的一个例子。如果您愿意,可以声明Dictionary您可以将string
替换为其他类型。 Bool,int,甚至是对象。
[TestInitialize]
public Setup()
{
Dictionary<string, string> variables = new Dictionary<string, string>();
//pseudocode
if VariablesContainLetters
variables.Add("var1", "a");
variables.Add("var2", "b");
else if VariablesContainNumbers
variables.Add("var4", "1");
variables.Add("var5", "2");
}
[TestMethod]
[VariablesContainLetters]
public method1() {MessageBox.Show(variable["var1"]);} //prints "a"
[TestMethod]
[VariablesContainNumbers]
public method2() {MessageBox.Show(variable["var4"]);} //prints "1"
答案 1 :(得分:1)
一个可能的解决方案是在测试类中创建私有方法,以您想要的不同方式初始化变量。
然后,在每个单元测试中,让测试的第一行调用所需的设置方法,然后继续进行其余的测试。
我认为这将为未来的测试维护者带来更易读的设计。
例如:
[TestMethod]
public void UnitTest_Testing_Letters()
{
InitializeUsingLetters();
// ...
// The rest of your unit test
Assert.AreEqual(a, _var1);
}
[TestMethod]
public void UnitTest_Testing_Numbers()
{
InitializeUsingNumbers();
// ...
// The rest of this unit test
Assert.AreEqual(1, _var4);
}
private void InitializeUsingLetters()
{
_var1 = a;
// ...
}
private void InitializeUsingNumbers()
{
_var4 = 1;
// ...
}