gpt4 book ai didi

c# - TestInitialize 和 TestCleanup 未在 DataTestMethod 的每个 DataRow 之前和之后运行

转载 作者:太空狗 更新时间:2023-10-29 23:39:51 25 4
gpt4 key购买 nike

下面您可以看到一些在 Window Phone 单元测试应用程序中使用 Mstest 编写的代码。
我有一个名为 TestMethod1 的普通 TestMethod 和一个名为 TestMethod2 的 DataTestMethod,它具有三个数据行:

[TestClass]
public class UnitTest1
{
[TestInitialize]
public void Setup()
{
Debug.WriteLine("TestInitialize");
}

[TestMethod]
public void TestMethod1()
{
Debug.WriteLine("TestMethod1");
}

[DataTestMethod]
[DataRow("a")]
[DataRow("b")]
[DataRow("c")]
public void TestMethod2(string param)
{
Debug.WriteLine("TestMethod2 param=" + param);
}

[TestCleanup]
public void TearDown()
{
Debug.WriteLine("TestCleanup");
}
}

如果我在 Debug模式下运行测试(在 Visual Studio 中为 Ctrl+R、Ctrl+T),我会在输出面板中看到:

TestInitialize
TestMethod1
TestCleanup
TestInitialize
TestMethod2 param=c
TestMethod2 param=a
TestMethod2 param=b
TestCleanup

如您所见,TestInitialize 只执行了两次:一次在 TestMethod1 之前,一次在 TestMethod2 之前,参数为 c。
TestCleanup也是一样,在TestMethod1之后执行一次,最后执行一次。

我希望在每次测试之前和之后执行 TestInitialize 和 TestCleanup,无论它是 TestMethod 还是 DataTestMethod。否则一个测试的执行会影响下一个测试。

我希望它是这样的:

TestInitialize
TestMethod1
TestCleanup
TestInitialize
TestMethod2 param=c
TestCleanup
TestInitialize
TestMethod2 param=a
TestCleanup
TestInitialize
TestMethod2 param=b
TestCleanup

我没有发现其他人有同样的问题,我做错了什么?

最佳答案

我对此有点陌生,但我认为如果您将 [DataTestMethod] 标记为 [TestMethod] 属性,那么它应该运行 Initialize 和 Cleanup对于每种测试方法。

[TestMethod]
[DataTestMethod]
[DataRow("a")]
[DataRow("b")]
[DataRow("c")]
public void TestMethod2(string param)
{
Debug.WriteLine("TestMethod2 param=" + param);
}

更新:微软说:TestCleanupAttribute “将在标有 TestMethodAttribute 的方法之后运行……”

当我测试它时它确实有效。如果您说它不起作用,请提供更多详细信息。

如果您希望每个测试类只运行一次初始化程序,您可以使用属性 TestClass Attribute。 See this post.

// Use ClassInitialize to run code before running the first test in the class
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext) { }

// Use ClassCleanup to run code after all tests in a class have run
[ClassCleanup()]
public static void MyClassCleanup() { }

关于c# - TestInitialize 和 TestCleanup 未在 DataTestMethod 的每个 DataRow 之前和之后运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15579833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com