Почему я не могу использовать expected в JUnit 4

#java #unit-testing #junit

#java #модульное тестирование #junit

Вопрос:

Я пытаюсь протестировать метод, отвечающий за получение данных из файла. Я хочу проверить, правильно ли генерируется исключение.

    package contentfile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class ContentFileRetrieverService implements ContentFileRetriever {

    @Override
    public String[] getContentFile(String pathName) {

        Stream<String> contentFileStream;
        try {
            contentFileStream = Files.lines(Paths.get(pathName));
        } catch (IOException e) {
            throw new IllegalArgumentException(e);
        }

        return contentFileStream.toArray(String[]::new);
    }
}
 

Мои тесты:

 package contentfile;

import org.junit.jupiter.api.Test;

import static org.junit.Assert.*;

class ContentFileRetrieverServiceTest {

    private ContentFileRetrieverService contentFileRetrieverService = new ContentFileRetrieverService();

    @Test
    void getContentFile() {
        String pathFile = "src\test\java\resources\TestText.txt";
        String[] testedContent = contentFileRetrieverService.getContentFile(pathFile);
        String[] expected = {"Line1 a", "Line2 b c", "Line 3"};
        assertArrayEquals(expected, testedContent);
    }

    @Test(expected =  IllegalArgumentException.class)
    void getContentFileWhenFileDoesNotExist() {
        String pathFile = "unknown";
        String[] testedContent = contentFileRetrieverService.getContentFile(pathFile);
    }
}
 

pom, xml

 <dependency>

    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>RELEASE</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
 

Он не будет компилироваться, поскольку не может разрешить метод excepted , который я делаю неправильно?
PS:
Не могли бы вы сказать мне, правильно ли я протестирую этот метод с помощью этих двух методов?

Комментарии:

1. Атрибут называется «expected» ; вы написали его с ошибкой.

2. @rgettman Извините, этого следовало ожидать. Я переписываю его и делаю эту ошибку прямо сейчас. Он по-прежнему не работает, даже если я пишу @Test(expected = IllegalArgumentException.class)

Ответ №1:

Вы смешиваете JUnit 4 и JUnit 5.

expected Элемент существует в JUnit4 @Test

Вместо этого JUnit 5 предлагает более мощный assertThrows

Комментарии:

1. Но у меня есть зависимость <version>4.12</version> , так как я могу смешивать с JUnit 5?

2. Вероятно, у вас есть не только эта зависимость. Возможно, ваша IDE предоставляет его… Ваш тестовый класс импортирует org.junit.jupiter.api.Test org.junit.Assert из JUnit5, а который из JUnit 4. Попробуйте найти зависимости от org.junit.jupiter групповых артефактов

3. Я добавил редактирование и вставил pom.xml с версиями. Не могли бы вы это проверить?

4. Да junit-jupiter-api , это зависимость от JUnit5. Таким образом, вы можете либо удалить зависимость от JUnit4, либо принять Assertions.assertThrows … Или придерживайтесь JUnit4 и используйте org.junit.Test вместо org.junit.jupiter.api.Test