模拟对象 returns 空
Mock objects returns null
我有以下测试class:
@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);
returns null
用户对象。我无法弄清楚为什么它返回 null。
编辑:
UserRepository
是 JpaRepository
,如果这是一个问题
public interface UserRepository extends JpaRepository<User, Long> {
}
您的 UserService
是一个模拟对象,没有定义处理 #save(User)
方法的行为。
模拟被测对象可能不是您想要的。我会建议您的被测对象在测试中实例化,并注入它们使用的对象的模拟或存根。
您的配置需要 return 一个真正的 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);
}
}
Mocks 是为协作者准备的,而不是为你正在测试的东西准备的。
我有以下测试class:
@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);
returns null
用户对象。我无法弄清楚为什么它返回 null。
编辑:
UserRepository
是 JpaRepository
,如果这是一个问题
public interface UserRepository extends JpaRepository<User, Long> {
}
您的 UserService
是一个模拟对象,没有定义处理 #save(User)
方法的行为。
模拟被测对象可能不是您想要的。我会建议您的被测对象在测试中实例化,并注入它们使用的对象的模拟或存根。
您的配置需要 return 一个真正的 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);
}
}
Mocks 是为协作者准备的,而不是为你正在测试的东西准备的。