【问题标题】:How to convert an unexpected exception into an assertion failure in NUnit test/Selenium/C#?如何在 NUnit 测试/Selenium/C# 中将意外异常转换为断言失败?
【发布时间】:2023-01-04 03:09:40
【问题描述】:

我是新手,无法在 NUnit 文档中弄清楚。我认为此链接包含有用的信息: https://docs.nunit.org/articles/nunit/writing-tests/constraints/ThrowsConstraint.html

如何将“元素不可点击”、“点击被拦截”等意外异常转化为断言失败。

如果没有转换,[Retry] NUnit 属性不会在出现意外异常时重新启动失败的测试。

【问题讨论】:

    标签: c# selenium automated-tests nunit


    【解决方案1】:

    编辑:

    好的,既然你已经分享了你的代码,你可以按照查理提到的那样做

    [Test] 
    [Retry(3)] 
    public void DepositFoOpen() 
    {
        Assert.That(
            () => 
            { 
                var MMFO = new MMFO_Tests_Lib.DepositFO(driver);
                MMFO.DepositFoOpen();
            }, Throws.Nothing); 
    }
    

    或者如果你想像我提到的那样使用 try-catch 块:

    [Test] 
    [Retry(3)] 
    public void DepositFoOpen() 
    {
        try
        {
            var MMFO = new MMFO_Tests_Lib.DepositFO(driver);
            MMFO.DepositFoOpen();
        }
        catch(Exception ex)
        {
            Assert.Fail();
        }
    }
    

    上一个答案: 如果我正确理解你的问题,你有一个单元测试方法,并且在你的方法中,你希望处理发生的异常。在这种情况下,您不需要像您提到的那样使用ThrowsContraint;届时只需致电Assert.Fail()。您可以找到文档here

    当您想确保给定的方法抛出异常(在这种情况下,测试被视为已通过)时,您应该使用 ThrowsConstraint

    【讨论】:

    • 我想你误会了。当写“As​​sert.Fail”时,测试在这个方法写的地方失败了。哪里会出现异常,我不知道。因此,任何异常都必须转换为断言失败。
    • @Norlerion 好吧,那我猜查理回答的正是您要找的。否则,您可以通过制作一个 try-catch 块,在 try 块中调用您的测试方法,并在 catch 块中调用 Assert.Fail() 来使用我的答案。
    • 你能告诉我应该在哪里以及如何写查理建议的内容吗?
    • @Norlerion 在你的单元测试中,写Assert.That(() => SomeMethod(), Throws.Nothing); 其中SomeMethod() 是你想要在抛出异常时失败的方法
    • 我的代码结构如下: [Test] [Retry(3)] public void methodName() { var name = new class.unitTest(driver);名称.unitTest(); Assert.That(() => name.unitTest(), Throws.Nothing); } 但是还是不行
    【解决方案2】:

    在这种情况下,您需要 ThrowsNothingConstraint

    Assert.That(() => SomeMethod(), Throws.Nothing);
    

    更新:如果您的问题有详细信息,我会给您更多详细信息。 :-)

    我从你的问题中所知道的是你的某些方法导致抛出异常。我将该方法称为“SomeMethod”,因为我只知道这些。我将它包装在一个 Assert 中,以便错误针对特定的代码行,这会导致异常。

    如果你知道哪个方法调用导致了异常,那么你应该弄清楚。最有可能的是,这是您对 Selenium 的一些调用。

    【讨论】:

    • 你能告诉我应该把这行写在哪里吗?我试着把它写在测试方法的末尾和属性[test]里面。它不起作用。
    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多