的Mockito。我试图模拟的依赖是NULL

时间:2015-08-13 09:19:04

标签: java unit-testing mockito

在我尝试测试的类中,我有@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

2 个答案:

答案 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("m‌​yVal‌​ue");
}