是否可以在程序集中的每个测试之前运行特定方法?
我知道TestInitialize
属性,但这个属性有“类范围”。如果它是在 Test 类中定义的,它将在该类的每个测试之前执行。
我想定义一个方法,该方法将在整个程序集中定义的每个测试之前执行。
[TestInitialize()]
是你需要的。
private string dir;
[TestInitialize()]
public void Startup()
{
dir = Path.GetTempFileName();
MakeDirectory(ssDir);
}
[TestCleanup()]
public void Cleanup()
{
ss = null;
Directory.SetCurrentDirectory(Path.GetTempPath());
setAttributesNormal(new DirectoryInfo(ssDir));
Directory.Delete(ssDir, true);
}
[TestMethod]
public void TestAddFile()
{
File.WriteAllText(dir + "a", "This is a file");
ss.AddFile("a");
...
}
[TestMethod]
public void TestAddFolder()
{
ss.CreateFolder("a/");
...
}
这为每个测试提供了一个新的随机临时路径,并在完成后将其删除。您可以通过在调试中运行它并查看每个测试用例的 dir 变量来验证这一点。
我不确定这个功能是否可以像其他测试框架(例如 MbUnit)一样在 MsTest 中实现。
如果我必须使用 MsTest,那么我通过定义具有[TestInitialize]
属性的抽象类 TestBase 来解决这个问题,并且每个需要这种行为的测试都派生自这个基类。在您的情况下,程序集中的每个测试类都必须继承自这个基......
可能还有另一种解决方案,您可以制作自定义测试属性 - 但我还没有尝试过...... :)
那么 MSTest 不是为每个测试实例化类吗?这就是我对它的理解。在这种情况下,您从构造函数中调用的任何内容都是初始化代码(按定义进行每个测试)。
编辑:如果它不起作用(我仍然认为应该这样做,因为 MSTest 需要确保单独的测试方法运行是隔离的)那么TestInitialize
就是你的属性。顺便说一句,Codeplex 上的 Link提供了最好的单元测试比较
我认为您正在寻找该ClassInitialize
属性。