如何在自定义TestMethodAttribute的Execute方法中访问TestContext?
解决MSTest自定义
TestMethodAttribute访问TestContext的问题 核心结论
自定义TestMethodAttribute的Execute方法无法直接获取MSTest注入的TestContext,因为MSTest的属性执行逻辑未提供该对象的直接注入通道。以下是两种可行的替代方案:
方案1:通过反射获取测试类中的TestContext
依赖测试类已正确定义公共的TestContext属性/字段(这是MSTest的标准用法),通过反射从测试类实例中提取该对象:
public override void Execute(ITestMethod testMethod) { // 获取测试类的实例对象 var testInstance = testMethod.Instance; // 查找测试类中定义的TestContext属性 var testContextProp = testMethod.DeclaringType.GetProperty("TestContext", typeof(TestContext)); if (testContextProp != null) { var testContext = (TestContext)testContextProp.GetValue(testInstance); testContext.WriteLine("自定义属性添加的元信息:XXX"); } // 执行原测试方法逻辑 base.Execute(testMethod); }
注意:如果测试类未定义public TestContext TestContext { get; set; },此方法会失效。
方案2:直接操作测试结果添加输出
如果不需要实时输出,可在测试执行完成后,将元信息追加到测试结果的输出中,最终会写入.trx文件:
public override void Execute(ITestMethod testMethod) { // 先执行原测试方法 base.Execute(testMethod); // 获取当前测试的结果对象 var testResult = testMethod.TestResults.FirstOrDefault(); if (testResult != null) { // 追加自定义元信息到输出 testResult.Output += $"自定义元信息:{DateTime.Now}\n"; } }
内容的提问来源于stack exchange,提问作者Michael Lihs
相关产品推荐
相关产品推荐

