2015-07-01 2 views
4

Это код, который я хочу, чтобы проверитьJunit expectMessage AssertionError

public static Map<String, String> JSON2Map(String urlParams) { 
    String [] params = urlParams.split("&"); 
    Map<String, String> map = new HashMap<String, String>(); 
    for (String param : params) { 
     String[] kvs= param.split("="); 
     if (kvs.length>1) 
     map.put(kvs[0], kvs[1]); 
    } 
    return map; 
} 

Это мой JUnit тест:

@Rule 
public ExpectedException exception = ExpectedException.none(); 

@Test 
public void JSON2MapTest() throws Exception { 
    exception.expect(NullPointerException.class); 
    exception.expectMessage("send null will occur NullPointerException"); 
    JSONUtils.JSON2Map(null);  
} 

Когда я запускаю тест он бросает:

java.lang.AssertionError: 
Expected: (exception with message a string containing "send null will occur NullPointerException" and an instance of java.lang.NullPointerException) 
got: java.lang.NullPointerException 

если Я прокомментирую //exception.expectMessage?(....), тогда он пройдет.

Что происходит с exception.expectMessage?

ответ

2

Причина тест не происходит из-за:

exception.expectMessage("send null will occur NullPointerException"); 

этот код утверждающий сообщение, возвращенное за исключением, но здесь ничего нет.

Here является примером того, как вы могли бы написать код и проверить ожидаемое сообщение:

public class Person { 
    private final int age; 

/** 
    * Creates a person with the specified age. 
    * 
    * @param age the age 
    * @throws IllegalArgumentException if the age is not greater than zero 
    */ 
    public Person(int age) { 
    this.age = age; 
    if (age <= 0) { 
     throw new IllegalArgumentException("Invalid age:" + age); 
    } 
    } 
} 

Тест:

public class PersonTest { 

    @Rule 
    public ExpectedException exception = ExpectedException.none(); 

    @Test 
    public void testExpectedException() { 
    exception.expect(IllegalArgumentException.class); 
    exception.expectMessage(containsString("Invalid age")); 
    new Person(-1); 
    } 
} 
+0

спасибо за вашу помощь, метод, который я хочу тест другой PG если бы не выбрасывал исключение, поэтому я не могу уловить матрицу String, поэтому, Как я написал сообщение об ошибке, когда он выбрасывает исключение, когда метод не выдает исключение? – crowngym

+0

Я действительно не понимаю, чего вы хотите? Вы хотите знать, как тестировать неконтролируемые исключения? –

+0

Мне нужно проверить коды других людей, поэтому, если они не попытаются и не поймают исключение, и сегодня я хочу показать сообщение, если оно не выбрасывало исключение, которое я ожидал, я должен делать? – crowngym

1

Обычный способ проверить метод в связи с ожидаемым исключением состоит в использовании следующей аннотации

@Test(expected = IllegalArgumentException.class) 

где тест не выполняется, если IllegalArgumentException не был брошен.

Edit: org.junit.Test Javadoc:

/** 
* Optionally specify <code>expected</code>, a Throwable, to cause a test method to succeed iff 
* an exception of the specified class is thrown by the method. 
*/ 
Class<? extends Throwable> expected() default None.class; 
Смежные вопросы