我目前正在使用最少的更改测试API的多个版本,这使得可以在两个版本上共享大量测试。我目前正在测试这个问题的解决方案是使用一个带有所有“测试方法”的基类,然后为每个版本分开类,如下所示:
[TestFixture]
public abstract class MyApiBaseTest
{
public ISharedFunctionsInApiInterface Api { get; set; }
public void MyTest()
{
var result = Api.Perform();
Assert...
}
}
public class MyApiBaseTestV2 : MyApiBaseTest
{
public MyApiBaseTestV2()
{
Api = new V2Implementation();
}
[TestCase(TestName = "MyApiV2_WhenSomething_ShouldSomething")]
public void MyTestV2()
{
MyTest();
}
}
此解决方案的积极作用是我可以完全控制测试名称,如果删除旧版本,我可以删除该文件。但负面的是,它是很多额外的代码和文件,很容易忘记基类中的方法,然后你只是错过了在新版本中测试它。
另一种解决方案当然是使用带参数的多个TestFixture:
[TestFixture(V1)]
[TestFixture(V2)]
public class MyApiTest
{
public MyApiTest(Version v)
{
Api = GetFromSomeFactory(v);
}
public ISharedFunctionsInApiInterface Api { get; set; }
[TestCase(TestName = "MyApi_WhenSomething_ShouldSomething")]
public void MyTest()
{
var result = Api.Perform();
Assert...
}
}
所以这个问题的正面是,只是一个简单的行,如果他们删除了一个版本的API也很容易删除。问题是两个版本都获得相同的测试名称,而如果你按类过滤它会显示“MyApiTest(version)”,那么使用其他过滤器或者你在内部查看测试结果(例如VSTS)就不清楚了。
所以有更好主意的人?我也尝试使用像{c}这样的格式化程序和继承,但它似乎只是采用基类名称。