#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