【问题标题】:TestNG how to test exceptions in unit testingTestNG如何在单元测试中测试异常
【发布时间】:2020-11-04 07:59:54
【问题描述】:

我需要测试异常但它得到以下错误。

org.testng.TestException: 
Method ContactIdentifierHelperTest.test()
[pri:0, instance:se.cambio.contactadministration.contact.helper.ContactIdentifierHelperTest@6d7b4f4c]
 should have thrown an exception of type class SpiderException

测试方法:

  @Test(expectedExceptions = { SpiderException.class })
  public void test()  {
    ContactData contactData = getContactData();
    contactIdentifierHelper.getSpellId(contactData);
  }

测试方法:

  public String getSpellId(final ContactData contactData)
  {
    String s = null;
    try
    {
      s = someMethod();
    }
    catch (SpiderException e)
    {
      e.printStackTrace();
    }
    return s;
  }

我哪里做错了?

【问题讨论】:

    标签: java unit-testing exception testng


    【解决方案1】:

    预期的行为是您的方法抛出异常并且您的测试失败,但它不可能永远成功(这是正确的),因为您在方法的主体中捕获了异常。

    为了抛出异常,你可以简单地拥有:

    public String getSpellId(final ContactData contactData) throws SpiderException
    {
        return someMethod();    
    }
    
    

    但是,请记住,只有在 someMethod() 有效地引发异常时,您的测试才会成功!

    现在,让我说一句:这个测试没有任何意义:你正在测试getSpellId,但你的业务逻辑在someMethod内部,此外,getSpellId接受一个从未在身体...

    【讨论】:

    • 如何抛出异常让测试通过?
    【解决方案2】:

    我建议你换个思路。

    您需要一种可重复、可预测的方式让您的测试方法抛出异常。实现这一目标的一种方法是通过某些输入。

    想象你的方法看起来像这样:

    public String getSpellId(final ContactData contactData) throws SpiderException
    {
        if ( contactData == null ) throw new ArgumentException("input is null")
        //some other code
    }
    

    这是可重复的,您始终可以通过传递 null 来触发异常。你知道你的代码应该如何表现,没有不确定性,你可以测试这种行为。

    然而,您所拥有的是另一个方法调用,它可能会失败,但您不知道如何以及为什么。当涉及到单元测试时,这是一个很大的不。

    为您的其他方法添加异常测试可能会更好地为您服务,而不必为这个方法烦恼。

    您真正想要避免的是,您的测试对被测代码有太多了解。您不想通过谁知道有多少层才能实现您想要的,因为这会给您留下脆弱的测试,每次代码更改时都需要更改。

    因此,请改变您对代码的看法,并致力于使其可测试。 另外,如果你想测试一个异常,你必须确保你没有捕捉到那个异常,因为这会隐藏实际的事情。

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 2013-02-21
      • 1970-01-01
      • 2011-06-21
      相关资源
      最近更新 更多