Try/catch 没有得到 C# 中 Assert 抛出的内部异常

Try/catch is not getting the inner exception thrown by Assert in c#

我正在开发一个项目,该项目将 运行 在生产环境中进行给定的单元测试。我想 return 单元测试的结果因此使用 try/catch。我假设如果任何断言失败,它将抛出异常。我可以 return 错误为 exception.message()

try {
   callingUnitTestMethod();
   return new TestResult {Name = "TestName", Status = "Success", Error = "NA"};
} catch(Exception ex) {
   return new TestResult {Name = "TestName", Status = "Fail", Error = ex.Message};
}

现在这为每个方法提供了相同的异常 - “调用的目标已抛出异常。”。但是我想要我们在 运行 从 testExplorer 进行单元测试时得到的断言消息。我们怎样才能得到正确的异常?

注意:我也尝试了 ex.InnerException.ToString()。但是 InnerException 为空。

您需要专门捕获 TargetInvocationException,并访问 .InnerException 作为原因,即

try
{
   callingUnitTestMethod();
   return new TestResult {Name = "TestName", Status = "Success", Error = "NA"};
}
catch (TargetInvocationException tex)
{
   return new TestResult {Name = "TestName", Status = "Fail",
       Error = tex.InnerException.Message};
}
catch (Exception ex)
{
   return new TestResult {Name = "TestName", Status = "Fail", Error = ex.Message};
}