如何使用 MSTest TestContext 获取错误消息?

我正在尝试从 mstest 获取失败测试用例的错误消息。


我在网上找到了一些使用 TestContext 的东西,下面是我的代码片段。


public static string GetErrorMessageFromTestContext(TestContext testContext) {


        BindingFlags privateGetterFlags = BindingFlags.GetField |

                                            BindingFlags.GetProperty |

                                            BindingFlags.NonPublic |

                                            BindingFlags.Instance |

                                           BindingFlags.FlattenHierarchy;


        var m_message = string.Empty;

        Type t = testContext.GetType();


        if (testContext.CurrentTestOutcome == UnitTestOutcome.Failed)

        {

            var field = t.GetField("m_currentResult", privateGetterFlags);

            object m_currentResult = field.GetValue(testContext);


            field = m_currentResult.GetType().GetField("m_errorInfo", 

            privateGetterFlags);

            var m_errorInfo = field.GetValue(m_currentResult);


            field = m_errorInfo.GetType().GetField("m_message", 

            privateGetterFlags);

            m_message = field.GetValue(m_errorInfo) as string;

        }


        return m_message;

    }

这个东西应该从失败的案例中返回错误消息。但是,当执行该行时:


var field = t.GetField("m_currentResult", privateGetterFlags);


字段被分配为 null。不确定原因是什么,所以我也愿意接受其他解决方案。谢谢!


九州编程
浏览 111回答 1
1回答

富国沪深

您的解决方案不起作用,因为这是 MSTest v1 示例,并且很可能您正在使用 MSTest v2。您不会在TestContextv2 中的 a 中找到消息,因为那里不存在该消息。您需要检查TestResult类才能获取此消息。获取TestResult类的一种方法是重写TestMethodAttribute并使用它,如下例所示:using Microsoft.VisualStudio.TestTools.UnitTesting;namespace TestProject{    [TestClass]    public class UnitTest    {        [MyTestMethod]        public void TestMethod()        {            Assert.IsTrue(false);        }    }    public class MyTestMethodAttribute : TestMethodAttribute    {        public override TestResult[] Execute(ITestMethod testMethod)        {            TestResult[] results = base.Execute(testMethod);            foreach (TestResult result in results)            {                if (result.Outcome == UnitTestOutcome.Failed)                {                    string message = result.TestFailureException.Message;                }            }            return results;        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP