我需要你的帮助:
我有这个方法:
public class MyTestClass {
protected void foo(JSONObject result, String text){
String userId = result.optString("name");
mApi.sendInfo(userId, text, mListener);
}
}
在Mockito我做:
@Test
public void whenFooIsCalledThenSendInfoGetsCalled(){
MyTestClass testClassSpy = spy(mMyTestClass);
JSONObject jsonOb = mock(JSONObject.class);
when(jsonOb.optString("name")).thenReturn("something");
testClassSpy.foo(eq(jsonOb), anyString());
....
some verification....
问题是,调用foo方法时,JSONObject结果为null。 我似乎无法让这个工作。我认为如果我嘲笑对象并让它在调用optString(" name")后返回一个String,就可以解决这个问题,但似乎NPE就是我得到的。 我做错了什么?
谢谢你
答案 0 :(得分:1)
我不是来自Java世界,但当我查看此代码段时,我不确定您要测试的是什么。如果您想确切验证测试方法的建议 whenFooIsCalledThenSendInfoGetsCalled
,那么:
mApi
JSONObject result
所以你的SUT类应该允许注入依赖项:
public class MyTestClass {
private mApi;
public MyTestClass(Api api) {
mApi = api;
}
void foo(JSONObject result, String text){ /* your implementation */}
}
你的测试方法:
@Test
public void whenFooIsCalledThenSendInfoGetsCalled(){
// arrange test
Api spyApi = spy(Api.class);
JSONObjec stub = mock(JSONObject.class);
when(stub.optString("name")).thenReturn("something");
MyTestClass sut = new MyTestClass(spyApi);
// Act
sut.foo(stub, "text");
// Assert
verify(spyApi , times(1)).foo(eq("something"), "text", listener);
}