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};
}
我正在开发一个项目,该项目将 运行 在生产环境中进行给定的单元测试。我想 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};
}