Java Mockito中的测试服务
我想测试服务Java Mockito中的测试服务,java,spring,spring-mvc,spring-boot,mockito,Java,Spring,Spring Mvc,Spring Boot,Mockito,我想测试服务 public class UserServiceTest { @Autowired private UserServiceImpl userService; @Before public void setup() { MockitoAnnotations.initMocks(this); } @Test public void testExistsUsername() { User use
public class UserServiceTest {
@Autowired
private UserServiceImpl userService;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testExistsUsername() {
User user = userService.findByUsername("jonki97").get();
}
}
然而,在考试期间,他把我赶了出去
java.lang.NullPointerException
at com.service.service.UserServiceTest.testExistsUsername(UserServiceTest.java:32)
我的服务仍然包含存储库
@Service("userService")
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
@Autowired
public UserServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
可能是我遗漏了一些错误,因此抛出null。您没有实例化任何mock,即使您有这个启动mock的方法。您需要在测试类中调用存储库的模拟:
@Mock
UserRepository userRepository;
以及提供模拟的行为(调用该方法时要做什么)。比如:
when(userRepository.findByUsername("jonki97")).thenReturn("OK");
// test the method after
希望有帮助您尝试过使用Runner吗 @RunWith(SpringRunner.class) 这对我很有用:
@RunWith(SpringRunner.class)
public class UserServiceTest {
@Mock
UserRepository userRepository;
@Before
public void setup(){
when(userRepository.findByUsername("jonki97")).thenReturn("jonki97");
}
@Test
public void testExistsUsername() {
String user = userRepository.findByUsername("jonki97");
assertEquals("jonki97", user);
}
}
不幸的是,同样的事情将mock注入到您想要用@InjectMocks测试的类中。另外,在测试类上使用@RunWIth(MockitoJUnitRunner.class)(或SpringRunner)注释