Если вы учитесь использовать JUnit, возможно, вы можете попробовать последнюю версию: JUnit5.
Эта последняя версия упрощает составление внешних функций, таких как макетирование, генерация тестов, загрузка Spring-компонентов и т. Д.
Более того, он как встроенная поддержка параметризованных методов (тестов), тогда как JUnit4 как только параметризованные классы (наборы тестов) и был необходим JUnitParams и его Runner
для поддержки параметризованных тестов.
Ваш тест можно записать так в JUnit5:
@ExtendWith(MockitoExtension.class)
class UserTestCases {
@Mock UserRepository userRepository;
@InjectMocks UserServiceImpl userService;
@ParameterizedTest
@MethodSource("input")
void getUserByIdtest(User user, User expectedUser) {
when(userRepository.findOne(user.getId())).thenReturn(user);
User result = userService.findById(user.getId());
assertEquals(user.getCountry(), expectedUser.getCountry());
assertEquals(user.getName(), expectedUser.getName());
}
static Stream<Arguments> input() {
return Stream.of(
// static method of Arguments
arguments(
new User(1, "india", "shiva"),
new User(1L, "india", "shiva")),
arguments(
new User(2, "india", "shiva"),
new User(2L, "india", "shiva")),
arguments(
new User(3, "india", "shiva"),
new User(3L, "india", "shiva")),
);
}
}
Однако этот тест только о делегировании от UserServiceImpl
до UserRepository
, поэтому здесь вам не нужны параметризованные тесты.
Единственный тест, который необходим, если вы хотите проверить делегирование (кажется, без отображения), это что-то вроде:
class UserTestCases {
@Mock UserRepository userRepository;
@InjectMocks UserServiceImpl userService;
@Test
void getUserByIdtest() {
User user = mock(User.class);
when(userRepository.findOne(any())).thenReturn(user);
assertEquals(userService.findById(1L), user);
}
}
В таком тесте используются библиотеки JUnit5 и Mockito.
Если вы используете Maven, ваш POM может выглядеть примерно так:
<properties>
<junit-jupiter.version>5.3.1</junit-jupiter.version>
<mockito.version>2.23.0</mockito.version>
<surefire-plugin.version>2.22.1</surefire-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</test>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
</plugin>
</plugins>
</build>
Надеюсь, это поможет!