Junit捕获预期的异常

时间:2013-05-27 15:32:57

标签: junit4 expected-exception

我正在做一个关于如何使用Expected Exception方法来捕获异常的教程。我有2个问题的代码。

  1. 我在下面显示的行中使用单引号而不是双引号,错误消息显示'无效字符常量' exception.expectMessage(containsString('invalid age'));

    2.代码在Eclipse中运行良好,但控制台页面没有显示 类人物中的消息。我应该使用关键字'extends'来扩展class PersonTest中的Class Person吗?

    请告诉我为什么使用单引号导致错误以及如何修改我的代码以便在执行testPerson类中的代码时可以看到来自Person Class的异常消息。谢谢!

  2. 教程代码:

    public class Person {
    private final String name;
    private final int age;
    public  Person(String name, int age){
        this.name =name;
        this.age = age;
        if (age <= 0){
            throw new IllegalArgumentException("Invalid age: " + age);
        }
    }
    
    }
    
    import static org.hamcrest.Matchers.*;
    import static org.junit.Assert.*;
    import org.junit.Rule;
    import org.junit.rules.ExpectedException;
    import org.junit.Test;
    
    public class personTest {
        @Rule
        public ExpectedException exception = ExpectedException.none();
    
        @Test
        public void testExpectedException(){
        exception.expect(IllegalArgumentException.class);
        //exception.expectMessage(containsString('invalid age'));
        exception.expectMessage(containsString("Invalid age"));
    
        new Person("Joe", -1);
        }
        }
    

1 个答案:

答案 0 :(得分:1)

<强>字符串

'无效年龄'在Java中是非法的。单引号用于单个字符。正如您所注意到的,您必须使用“无效年龄”来使Java对语法感到满意。

<强>控制台

行为是正确的。 JUnit正在捕获异常,因此您无法在控制台上看到它。

<强>公约

Java约定是对类名使用camel case。以大写字母开头。所以如果你的班级被命名为PersonTest会更好。