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)注释