gpt4 book ai didi

c# - TestContext.TestName 属性永远不会改变

转载 作者:太空狗 更新时间:2023-10-29 17:46:47 26 4
gpt4 key购买 nike

目标:

我想使用 TestContext.TestName 属性提取正在运行的测试的名称,以便我的 [TestCleanup] 函数可以在每个测试完成时自动将结果记录到我们定制的结果存储库中。

问题:

即使在我的基本“完整性检查”测试项目中,它包含 5 个类似于以下结构的测试:

[TestMethod]
public void TestMethodX()
{
Console.WriteLine(String.Format("In Test '{0}'",_ctx.TestName));
Assert.IsTrue(true);
}

使用像下面这样的类“初始化器”为我设置 _ctx:

[ClassInitialize]
public static void ClassInit(TestContext Context)
{
_ctx = Context;
Console.WriteLine("In ClassInit()");
}

[[注意:Console.WriteLines 纯粹是为了让我将鼠标悬停在上面并检查值/属性等]]

_ctx.TestName 永远不会更改测试运行中第一个测试的名称,即如果我要运行所有五个测试('TestMethod1'、'TestMethod2'、'TestMethod3'等)他们都在我的结果存储库中记录“TestMethod1”作为他们的测试名称。单独运行测试它工作正常,但这对我没有用,因为我需要能够针对我的应用程序运行 10 次/100 次/1000 次测试,并让 testContext 处理测试名称或我。

我现在已经尝试过几次并搜索了互联网负载,没有其他人遇到这个问题,所以我要么:这个问题是独一无二的,'Google-Fu'技能很差,或者正在做一些真实的事情愚蠢的。希望这是有道理的,并且有人知道答案。

提前致谢

安迪

最佳答案

发生这种情况是因为 [ClassInitialize] 在整个测试运行中仅执行一次,并且您在其中初始化了 _ctx。使用 [TestInitialize] 代替,它在每个测试方法之前执行并覆盖 TestContext Class :

[TestClass]
public class TestClass
{
public TestContext TestContext { get; set; }

[TestInitialize]
public void Initialize()
{
// Runs once before each test method and logs the method's name
Console.WriteLine(TestContext.TestName);
}

[TestMethod]
public void TestMethod1()
{
// Logs the method name inside the method
Console.WriteLine(String.Format("In Test '{0}'", TestContext.TestName));
}

// ... Your rest test methods here
}

关于c# - TestContext.TestName 属性永远不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494209/

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