MsTest - 在程序集中的每个测试之前执行方法

时间:2009-03-12 16:06:39

标签: .net mstest

是否可以在装配中的每个测试之前运行特定方法?

我知道TestInitialize属性,但此属性具有“类范围”。如果它在Test类中定义,它将在此类的每个测试之前执行。

我想定义一个方法,该方法将在整个程序集中定义的每个测试之前执行。

5 个答案:

答案 0 :(得分:59)

[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/");
    ...
}

这为每个测试提供了一个新的随机临时路径,并在完成后删除它。您可以通过在debug中运行它并查看每个测试用例的dir变量来验证这一点。

答案 1 :(得分:15)

我不确定在其他测试框架(例如MbUnit)中,MsTest开箱即可使用此功能。

如果我必须使用MsTest,那么我通过使用[TestInitialize]属性定义抽象类TestBase来解决这个问题,并且需要此行为的每个测试都派生自此基类。在您的情况下,程序集中的每个测试类都必须从此基础继承...

可能还有另一个解决方案,你可以制作你的自定义测试属性 - 但我还没有尝试过这个......:)

答案 2 :(得分:15)

您想使用[AssemblyInitialize]

请参阅:MSDN Link

或这个问题: on stackoverflow

答案 3 :(得分:1)

MSTest是不是为每个测试实例化了类?这是我对它的理解。在这种情况下,无论你从构造函数调用什么,都是初始化代码(按定义每个测试)。

编辑:如果它不起作用(我仍然认为它应该是因为MSTest需要确保单独的测试方法运行是隔离的),那么TestInitialize是你的属性。顺便说一句,Link on Codeplex

可以获得最佳的单元测试比较

答案 4 :(得分:0)

我认为您正在寻找ClassInitialize属性。