【问题标题】:jUnit same exception in different casesjUnit在不同情况下相同的异常
【发布时间】:2010-03-14 22:29:07
【问题描述】:

我正在为解析字符串的构造函数编写 jUnit 测试,然后检查许多事情。当有错误的数据时,对于每一件事,都会抛出一些带有不同消息的 IllegalArgumentException。 所以我想为它写测试,但是我怎么能识别出什么错误呢? 我该怎么做:

@Test(expected=IllegalArgumentException.class)
public void testRodneCisloRok(){
    new RodneCislo("891415",dopocitej("891415"));
}

这就是我想要的样子,但我不知道是否有可能以某种方式编写它:

@Test(expected=IllegalArgumentException.class("error1"))
public void testRodneCisloRok(){
    new RodneCislo("891415",dopocitej("891415"));
}

【问题讨论】:

    标签: java unit-testing junit


    【解决方案1】:

    如果你有 JUnit 4.7 或更高版本,你可以使用这种(优雅的)方式:

    @Rule
    public ExpectedException exception = ExpectedException.none();
    
    @Test
    public void testRodneCisloRok(){
        exception.expect(IllegalArgumentException.class);
        exception.expectMessage("error1");
        new RodneCislo("891415",dopocitej("891415"));
    }
    

    【讨论】:

      【解决方案2】:

      你需要用老式的方式来做:

      @Test
      public void testRodneCisloRok() {
          try {
             new RodneCislo("891415",dopocitej("891415"));
             fail("expected an exception");
          } catch (IllegalArgumentException ex) {
             assertEquals("error1", ex.getMessage());
          }
      }
      

      @Test(expected=...) 语法很方便,但在很多情况下它过于简单。

      如果区分异常条件很重要,您可能需要考虑开发一个可以专门捕获的异常类层次结构。在这种情况下,IllegalArgumentException 的子类可能是个好主意。它可以说是更好的设计,并且您的测试可以捕获特定的异常类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        • 2022-01-10
        • 1970-01-01
        • 2017-02-25
        相关资源
        最近更新 更多