我有一个烟雾测试应用程序的几个关键服务。我希望这些测试能够轻松编写并自我发现。为此,我使用MSTest的[TestMethod]样式为每个方法创建了一个属性。我还创建了一个对象,它将找到所有这些方法并在try-catch中执行它们。如果方法抛出异常,我报告为失败,否则为成功。
这是所有非常熟悉的单元测试,这是意图。所以测试看起来像......
[MyTestAttribute]
public void TestingTimesAhead()
{
var d = DateTime.MaxValue.AddDays(1);
}
魔法发生在测试对象中,它有一个Action属性和一个Run方法......
public Action TestAction { get; private set; }
public override ITestResult RunTest()
{
try
{
this.TestAction.Invoke();
return new BaseTestResult() { Result = TestResultStatus.Success };
}
catch(Exception ex)
{
return new BaseTestResult() { Result = TestResultStatus.Failure, FailureException = ex};
}
}
当单独运行时,上面的测试被包装为Action,将导致异常并且测试失败。完美。
但是,当我将属性和测试运行对象包装到dll并从新项目引用时,VS Debugger会中断异常。 我在该对话框中看到一个选项,当这个例外类型是用户未处理的时候切换到中断'。
我可以逐个类型地抑制异常,但这并不适用于重用。此外,如果我从BIN输出运行发布版本,那么预期的行为就在那里 - 它只是一个非常尴尬的开发体验。
是否可以从我的代码中管理此例外设置?或者,如果任何人都可以提出解决问题的方法,我就会接受这些想法。