我有以下测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringTestConfig.class)
public class UserServiceTest {
@Inject
private UserRepository userRepository;
@Inject
private UserService userService;
@Test
public void testProcessInvoice() throws SQLException {
User user = new User();
user.setFirstName("abc");
when(userRepository.save(any(User.class))).thenReturn(user);
Assert.assertNotNull(userService);
User savedUser = userService.save(user);
Assert.assertEquals("abc", savedUser.getFirstName());
}
}
我低于SpringTestConfig.java
@Configuration
public class SpringTestConfig {
@Bean
public UserService userService() {
return Mockito.mock(UserService.class);
}
@Bean
public UserRepository userRepository() {
return Mockito.mock(UserRepository.class);
}
}
致电User savedUser = userService.save(user);
,返回null
个用户对象。我无法弄清楚为什么它会返回null。
修改
UserRepository
为JpaRepository
,如果这是一个问题
public interface UserRepository extends JpaRepository<User, Long> {
}
答案 0 :(得分:4)
您的UserService
是一个模拟对象,并且没有用于处理#save(User)
方法的已定义行为。
模拟测试中的对象可能不是你在这里之后的样子。我建议您在测试中实例化您测试的对象,并注入他们使用的对象的模拟或存根。
答案 1 :(得分:2)
您的配置需要返回真正的UserService:
@Configuration
public class SpringTestConfig {
@Bean
public UserService userService() {
return new UserServiceImpl(); // or whatever your implementation is
}
@Bean
public UserRepository userRepository() {
return Mockito.mock(UserRepository.class);
}
}
模拟器适用于合作者,而不适用于您正在测试的事物。