@Test (ожидается = Exception.class) не работает для меня, что я пропускаю? - PullRequest
0 голосов
/ 11 июня 2018

Я использую sts, но также использую mvn clean install в командной строке.Я создал это простое для тестирования в качестве примера.

import org.junit.Test;

import junit.framework.TestCase;

public class QuickTest extends TestCase {

    @Test(expected = Exception.class)
    public void test() {
        throwsException();
    }

    private void throwsException() throws Exception {
        throw new Exception("Test");
    }
}

Моя STS (Eclipse) IDE жалуется, что строка, вызывающая метод testThrowsException ();необработанный тип исключения Исключение.

Если я пытаюсь запустить тест, я получаю ту же ошибку

java.lang.Error: Unresolved compilation problem: 
    Unhandled exception type Exception

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Проблема в том, что вы объявляете Exception, как ожидается, в аннотации .Это поведение во время выполнения , как определено JUnit.Ваш код должен все еще соответствовать всем нормальным правилам Java во время компиляции.В соответствии с обычными правилами Java, когда метод генерирует проверенное исключение, вы должны либо 1) пометить его как выброшенный в сигнатуре метода, либо 2) перехватить его и обработать его.Ваш код не делает ни того, ни другого.Для вашего теста вы хотите выполнить первое, чтобы JUnit не сработал:

public class QuickTest extends TestCase
{
    @Test(expected = Exception.class)
    public void test() throws Exception {
        throwsException();
    }
}

Или вы можете изменить Exception на RuntimeException в обоих случаях, так что это непроверенное исключение (т.е. не подлежитпо тем же правилам).

0 голосов
/ 11 июня 2018

вам нужно добавить броски, так как это проверенное исключение, и вы хотите, чтобы метод выбрасывал его вместо обработки (для целей теста)

@Test(expected = Exception.class)
    public void test() throws Exception{
        throwsException();
    }
...