2015-01-05 13 views
6

Przełączam z TestNg na JUnit. Muszę dopasować oczekiwany komunikat wyjątku z predefiniowanym wyrażeń regularnych takich jak w poniższym kodzie TestNG:JUnit - oczekiwany komunikat wyjątku wyrażenie regularne

@Test(expectedExceptions = SomeClass.class, expectedExceptionsMessageRegExp = "**[123]regexExample*") 
    public void should_throw_exception_when_...() throws IOException { 
     generatesException(); 
    } 

To działa dobrze, ale nie mogę osiągnąć to samo zachowanie w JUnit. Wpadłem na to rozwiązanie:

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

@Test 
public void should_throw_exception_when_...() throws IOException { 
    expectedEx.expect(SomeClass.class); 
    expectedEx.expectMessage("**[123]regexExample*"); 
    generatesException(); 
} 

Ale metoda expectedEx.expectMessage("**[123]regexExample*"); nie obsługuje wyrażeń regularnych, muszę dostarczyć go z dokładnym sztywno wiadomości. Widziałem, że można to osiągnąć, podając tę ​​metodę z Matcherem, ale nie jestem pewien, jak to zrobić właściwie.

Jakikolwiek dobry sposób robienia tego?

+0

Innym obejście, ale można złapać oczekiwany wyjątek w teście i twierdzić, że komunikat jest poprawny, z regex. Oraz 'assert.fail()' jeśli wyjątek nie został zgłoszony. – Magnilex

Odpowiedz

7

Co o czymś takim ...

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

@Test 
public void test1() throws IOException { 
    expectedEx.expect(SomeClass.class); 
    expectedEx.expectMessage(matchesRegex("**[123]regexExample*")); 
    generatesException(); 
} 

private Matcher<String> matchesRegex(final String regex) { 
    return new TypeSafeMatcher<String>() { 
    @Override 
    protected boolean matchesSafely(final String item) { 
     return item.matches(regex); 
    } 
    }; 
} 
4

Czy mógłbyś skorzystać z Matchera StringContains?

expectedEx.expectMessage(StringContains.containsString("regexExample")); 

Niestety, w bibliotece nie ma Matchera Wyrażeń Regularnych (o którym wiem). Wiele osób wdrożyło własne.

+0

Nie dokładnie to, czego szukałem, ale pomogło mi to trochę. +1. – Filip