2013-05-17 6 views
5

Chcę potwierdzić, że wyjątek został zgłoszony i serwer zwraca błąd wewnętrzny serwera 500.MockMVC sposób testowania kodu wyjątku i odpowiedzi w tym samym przypadku testowym

Aby podkreślić intencję fragment kodu jest usługa:

thrown.expect(NestedServletException.class); 
this.mockMvc.perform(post("/account") 
      .contentType(MediaType.APPLICATION_JSON) 
      .content(requestString)) 
      .andExpect(status().isInternalServerError()); 

Oczywiście nie robi to ważne jeśli piszę isInternalServerError lub isOk. Test zostanie zaliczony niezależnie od tego, czy wyjątek zostanie zgłoszony poniżej oświadczenia throw.except.

Jak mógłbyś rozwiązać ten problem?

Odpowiedz

3

Można spróbować czegoś jak poniżej -

  1. utworzyć niestandardowe matcher

    public class CustomExceptionMatcher extends 
    TypeSafeMatcher<CustomException> { 
    
    private String actual; 
    private String expected; 
    
    private CustomExceptionMatcher (String expected) { 
        this.expected = expected; 
    } 
    
    public static CustomExceptionMatcher assertSomeThing(String expected) { 
        return new CustomExceptionMatcher (expected); 
    } 
    
    @Override 
    protected boolean matchesSafely(CustomException exception) { 
        actual = exception.getSomeInformation(); 
        return actual.equals(expected); 
    } 
    
    @Override 
    public void describeTo(Description desc) { 
        desc.appendText("Actual =").appendValue(actual) 
         .appendText(" Expected =").appendValue(
           expected); 
    
    } 
    } 
    
  2. Zadeklaruj @Rule w klasie jak poniżej JUnit -

    @Rule 
    public ExpectedException exception = ExpectedException.none(); 
    
  3. pomocą klienta matcher w przypadku testowym jako -

    exception.expect(CustomException.class); 
    exception.expect(CustomException 
         .assertSomeThing("Some assertion text")); 
    this.mockMvc.perform(post("/account") 
        .contentType(MediaType.APPLICATION_JSON) 
        .content(requestString)) 
        .andExpect(status().isInternalServerError()); 
    

P.S .: mam pod warunkiem rodzajowe pseudo kod, który można dostosować jak na swoje wymagania.

Powiązane problemy