在我尝试测试的类中,我有@Resource
注释依赖项,我正在尝试编写一些测试,并希望注入该依赖项,我的问题是,在模拟依赖项后,它的值为{{ 1}}
null
NB。我的测试类使用private SOAPService soapService;
private WebServiceContext webServiceContext = mock(WebServiceContextImpl.class);
@Before
public void setup(){
soapService = new SOAPService(webServiceContext);
}
@Test
public void startUploadFileTest(){
soapService.startUpload("text");
......
/I omitted the remaining code, because I get the NullPointerException/
}
编辑 SoapService实施
MockitoJUnitRunner.class
答案 0 :(得分:1)
据我所知,您的soapService与您的模拟webServiceContext没有任何关联。
如果您在班级中使用依赖注入:
您应该使用@InjectMocks
注释您的SOAPService字段,以便Mockito知道该怎么做。如果你这样做,Mockito将实例化你的soapService并将Mocks注入其中。不需要手动调用构造函数。
如果您不在类中使用依赖注入: 你必须通过setter将你的WebServiceContext设置到你的soapService中,这不会神奇地发生。
答案 1 :(得分:1)
你是否尝试像这样初始化你的soapService:
@Before
public void setup(){
soapService = new SOAPService();
Mockito.initMocks(soapService);
}
修改强>
使用新代码,您还必须模拟静态方法
Authentication.getUsername(...)
为此,您必须使用PowerMockito。
在类声明注释之前添加@PrepareForTest,如
@RunWith(PowerMockRunner.class)
@PrepareForTest({Authentication.class})
public class MyTest {
....
}
在准备测试期间,模拟对getUserName的调用,如
@Before
public void setup(){
soapService = new SOAPService(webServiceContext);
PowerMockito.when(Authentication.getUsername(Mockito.any())).thenReturn("myValue");
}