Visual studio MSTEST-在断言失败后继续

Visual studio MSTEST-在断言失败后继续,visual-studio,visual-studio-2010,mstest,Visual Studio,Visual Studio 2010,Mstest,我想知道在断言失败后是否有一种简单的方法来完成测试。我们以前使用Galileo进行所有的自动化测试,但是我们已经移动了VisualStudio测试框架。我们有一种方法,可以让测试失败,但可以继续 public static bool DoAssertAndContinue(Action assert) { try { assert(); return true; }

我想知道在断言失败后是否有一种简单的方法来完成测试。我们以前使用Galileo进行所有的自动化测试,但是我们已经移动了VisualStudio测试框架。我们有一种方法,可以让测试失败,但可以继续

        public static bool DoAssertAndContinue(Action assert)
    {
        try
        {
            assert();
            return true;
        }
        catch (AssertionException ae)
        {
            ConfigContext.WriteLine(ae.Message);
            return false;
        }
    }
这是我们以前用过的…它将被称为:

assertionResults.Add(Automation.Utils.CommonMethods.DoAssertAndContinue(() => Assert.IsTrue(detail.ValidateName(boo, urns))));

我只是想找出一种最好的方法来模拟我们以前的测试,而不必重构我们所有的测试。

MsTest框架对失败的断言抛出异常。它在单元测试方法之外的传播是导致测试失败的原因。如果要继续处理失败的断言,只需处理该异常并防止它转义该方法

您也可以在MSTest中使用Try/Catch。在Catch块中,您可以捕获特定错误,并使用控制台打印它。编写以了解错误。我建议你仔细研究一下,了解更多细节

编辑1:我个人不使用try/catch来通过我的测试方法。我编写了一个测试方法来发现实际产品中的缺陷。所以,如果您希望您的调用方法会给您一些特定的异常,那么我建议使用attribute。如果您正在运行针对单个测试数据的测试方法,则这是适用的


现在,如果您想将多个测试数据传递到您的测试方法中。然后我建议使用数据驱动的测试用例。在这里,您可以将所有测试数据保存在XML或XLS或DB中。然后使用该输入文件,您可以将多个测试数据输入到您的测试方法中。在此处尝试不使用Try/catch,对于任何测试数据,如果调用方法向您发送了一些异常,则查看MSTest是否将处理该异常并移动到下一个测试数据。若它移动,那个么在测试结果窗口中,你们将能够看到为什么对于那个特定的测试数据,你们的方法会失败。对于数据驱动的概念,请参见此

而不是AssertionException,您现在应该捕获所有mstest assert失败的基本异常。

我想我对此有点困惑。我在这里没有正确捕获异常吗?什么是一个正确捕捉它的例子,这样它就不会逃逸这个方法?我想我对此有点困惑。我在这里没有正确捕获异常吗?什么是一个正确捕捉它的例子,这样它就不会逃避方法?更新了我的答案。希望这对你有帮助。这对我来说很有用。我把它改成了一个untestexception,现在它可以正常工作了。我现在正在添加完整的堆栈报告。