2015-01-05 6 views
6

Sto passando da TestNg a JUnit. Ho bisogno di abbinare messaggio di eccezione previsto con espressioni regolari predefinite quali nel codice seguente TestNG:JUnit - espressione regolare prevista messaggio di eccezione

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

Questo funziona bene, ma non riesco a ottenere lo stesso comportamento in JUnit. Sono venuto con questa soluzione:

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

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

Ma metodo expectedEx.expectMessage("**[123]regexExample*"); non supporta le espressioni regolari, ho bisogno di fornire con il messaggio esatto hardcoded. Ho visto che questo potrebbe essere ottenuto fornendo quel metodo con Matcher ma non sono sicuro di come farlo correttamente.

Qualsiasi buon modo per farlo?

+0

Un'altra soluzione, ma si potrebbe intercettare l'eccezione prevista nel test e affermare che il messaggio è corretto, con una regex. E 'assert.fail()' se l'eccezione non è stata lanciata. – Magnilex

risposta

7

Che dire qualcosa di simile ...

@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

È possibile utilizzare il Matcher StringContains?

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

Sfortunatamente, non c'è un Matcher di espressioni regolari nella libreria (che io sappia). Molte persone hanno implementato la propria.

+0

Non è esattamente la cosa che stavo cercando, ma mi ha aiutato un po '. +1. – Filip