Как написать тест junit для исключений, которые явно выбрасываются - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть метод, который принимает строку и проверяет, содержит ли она другую строку.Если это так, то выдается пользовательское исключение.

Class Test{
    String s2="test";
    public void testex(String s1){
        if(s1.contains(s2))
            throw new customException();
    }
}

Я пытаюсь написать модульный тест для этого:

@Test (expected = customException.class){
 when(s1.contains(s2)
                .thenThrow(new customException());
}

Однако мой тест не выполняется с ошибкой как- java.lang.Exception: Unexpected exception, expected customException but was<org.mockito.exceptions.misusing.MissingMethodInvocationException>

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Этот тест не кажется особенно полезным, но я полагаю, что ваша проблема в том, что Mockito, когда () ожидает вызова метода для смоделированного объекта.

@Test(expcted = CustomException.class)
public void testExMethod() {
    @Mock
    private Test test;
    when(test.testEx()).thenThrow(CustomException.class);
    test.testEx("test string");
}
0 голосов
/ 28 сентября 2019

Я не совсем слежу за вашим примером теста.Похоже, вы издеваетесь над своим настоящим классом с помощью Mockito, а не пишете тест для джунта.Я бы написал такой тест:

С методом assertThrows от junit:

@Test
void stringContainingThrowsError() {
    Test myClassThatImTesting = new Test();
    assertThrows(CustonException.class, () -> myClassThatImTesting.testex("test"))
}

С обычным утверждением:

@Test
void stringContainingThrowsError() {
    Test myClassThatImTesting = new Test();
    try {
        myClassThatImTesting.testex("test");
        fail();
    } catch (Exception ex) {
        assertTrue(ex instanceof CustomException);
    }
}
...