Java 模拟一个也有自动连线类的自动连线类

Java 模拟一个也有自动连线类的自动连线类,java,mocking,autowired,Java,Mocking,Autowired,我正在为我的班级做Junit测试。我的类的源代码如下: @Autowired private LanguageRepository languageRepository; @ApiOperation(value = "Languages", notes = "Get Languages.") @CrossOrigin @RequestMapping(method = RequestMethod.GET, path = Constants.REST_LANGUAGES) public List&

我正在为我的班级做Junit测试。我的类的源代码如下:

@Autowired
private LanguageRepository languageRepository;

@ApiOperation(value = "Languages", notes = "Get Languages.")
@CrossOrigin
@RequestMapping(method = RequestMethod.GET, path = Constants.REST_LANGUAGES)
public List<Language> getLanguages(HttpServletRequest request)
        throws GlobalException, ServiceException, SoapException, RepositoryException {
    LOG.info("Call Rest method: getLanguages");

    List<Language> languages = languageRepository.getAllLanguages();

    return languages;
}
@Autowired
私人语言地点语言地点;
@ApiOperation(value=“Languages”,notes=“Get Languages.”)
@交叉起源
@RequestMapping(method=RequestMethod.GET,path=Constants.REST\u语言)
公共列表getLanguages(HttpServletRequest)
抛出GlobalException、ServiceException、SoapException、RepositoryException{
LOG.info(“调用Rest方法:getLanguages”);
List languages=languageRepository.getAllLanguages();
返回语言;
}
LanguageRepository还有一个名为LanguageService的自动连接类

文本的源代码如下:

@Mock
private LanguageRepository languageRepository;

@Before
public void initMocks() {
    MockitoAnnotations.initMocks(this);
}

@Test
public void exampleTest() throws GlobalException, ServiceException, SoapException, RepositoryException {
    Language language = new Language("id", "name", "code");
    List<Language> languageListGiven = new ArrayList<Language>();
    languageListGiven.add(language);

    HttpServletRequest request = Mockito.mock(HttpServletRequest.class);

    Mockito.when(languageRepository.getAllLanguages()).thenReturn(languageListGiven);

    // 2- act
    LanguageController languageController = new LanguageController();
    List<Language> languageListReturned = languageController.getLanguages(request);

    // 3- assert
    Assert.assertEquals(languageListGiven, languageListReturned);
}
@Mock
私人语言地点语言地点;
@以前
公共void initMocks(){
initMocks(this);
}
@试验
public void exampleTest()引发GlobalException、ServiceException、SoapException、RepositoryException{
语言=新语言(“id”、“名称”、“代码”);
List languageListGiven=new ArrayList();
languageListGiven.add(语言);
HttpServletRequest=Mockito.mock(HttpServletRequest.class);
Mockito.when(languageRepository.getAllLanguages()).thenReturn(languageListGiven);
//2-法案
LanguageController LanguageController=新的LanguageController();
List languageListReturned=languageController.getLanguages(请求);
//3-断言
Assert.assertEquals(languageListGiven,languageListReturned);
}
但是当我调用存储库的方法时,我收到一个nullPointerException

当我执行“Mockito.when”时,可以使用mock来接收我想要在测试中接收的对象


谢谢

您已经为
LanguageRepository
创建了一个模拟,但尚未将其注入控制器。您需要在控制器中为
languageRepository
创建一个setter方法,并在测试中使用它

LanguageController LanguageController=newlanguagecontroller();
languageController.setLanguageRepository(languageRepository);

空指针在哪一行?张贴有问题的stacktrace。