предисловие
Многие компании предъявляют жесткие требования к написанию модульных тестов.При отправке кода, если модульный тест не проходит или покрытие модульных тестов не соответствует стандартам, код будет отклонен. Написание модульных тестов также является способом обеспечения качества кода.
модульный тест
Я считаю, что подавляющее большинство разработчиков Java использовали Junit для написания модульных тестов.
Импорт зависимостей:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
Просто добавьте аннотацию @Test к методу:
С аннотацией @Test будет значок запуска.
Проблема с весенней зависимостью
В настоящее время разработка Java практически неотделима от весны. Но при использовании spring возникает проблема внедрения зависимостей при написании модульных тестов.
Предположим, есть следующая служба:
@Service
public class TestService {
public String getString() {
return "Hello World!";
}
}
Autowire прямо в Junit:
public class JunitTest {
@Autowired
private TestService testService;
@Test
public void test() {
System.out.println(testService.getString());
}
}
Ошибка при запуске:
модульный тест записи Springboot
В springboot очень просто решить проблему зависимости Spring. Просто нужно несколько аннотаций, которые он предоставляет:
Импорт зависимостей:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Здесь представлена зависимость spring-boot-starter-test, необходимая для написания модульных тестов в springboot.
Добавьте аннотации @RunWith(SpringRunner.class), @SpringBootTest к классу модульного теста:
В это время вы можете нормально вводить весневые зависимости, выполните метод, и вы можете увидеть выход, когда SpringBoot запускается:
Если это проект Springboot, созданный Spring Initialize (объяснено в первой статье этой серии), класс модульного теста будет создан автоматически:
Когда мы пишем модульные тесты, мы можем напрямую наследовать этот класс.
откат транзакции модульного теста
Написание модульных тестов неизбежно требует манипулирования базой данных. Иногда база данных для модульного тестирования совпадает с базой данных во время разработки, чтобы не повлиять на данные в базе данных, операцию необходимо откатить после завершения модульного теста. Это также очень легко решить в springboot, просто наследуйте единственный тестовый класс от AbstractTransactionalJUnit4SpringContextTests.
В базе данных есть такие данные:
Класс модульного теста выглядит следующим образом:
Методы испытаний следующие:
@Test
public void deleteAll() {
userRepo.deleteAll();
}
После метода выполнения, если транзакция не прокатит, все пользовательские данные в таблице очищаются.
Через проверку результатов нет проблем с запуском одиночного теста, проверьте базу данных:
Данные также не удаляются, что свидетельствует об откате транзакции.
Удалите унаследованный класс AbstractTransactionalJUnit4SpringContextTests и снова выполните метод deleteAll:
Данные в базе удалены
Суммировать
В этой статье представлен метод написания модульных тестов в Springboot. На самом деле, элегантное написание юнит-тестов должно включать в себя много вещей, таких как моки (mockito, mockmvc и т. д.), которые не рассматриваются в этой статье, Если вам интересно, вы можете узнать о них.