繁体   English   中英

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

[英]MsTest - executing method before each test in an assembly

是否可以在程序集中的每次测试之前运行特定方法?

我知道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 变量来验证这一点。

我不确定在开箱即用的 MsTest 中是否可以像在其他测试框架(例如 MbUnit)中一样使用此功能。

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

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

您想使用[AssemblyInitialize]

请参阅: MSDN 链接

或者这个问题: 在stackoverflow上

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

编辑:如果它不起作用(我仍然认为它应该起作用,因为 MSTest 需要确保单独的测试方法运行是隔离的)然后TestInitialize是您的属性。 顺便说一下,最好的单元测试比较可以在Codeplex上的Link 上找到

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM