是否可以在装配中的每个测试之前运行特定方法?
我知道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来解决这个问题,并且需要此行为的每个测试都派生自此基类.在您的情况下,程序集中的每个测试类都必须从此基础继承...
可能还有另一种解决方案,你可以制作你的自定义测试属性 - 但我还没有尝试过这个... :)
你想用[AssemblyInitialize]
.
请参阅:MSDN链接
或者这个问题: 在stackoverflow上