这个问题和这个问题相似,但解决办法不起作用。mockito和guice有问题
package mock
import com.google.inject.persist.Transactional;
import lombok.NonNull;
import java.util.ArrayList;
import java.util.List;
public class SomeClass {
public int A() {
ArrayList<Object> objects = new ArrayList<>();
return this.B(objects);
}
@Transactional
public int B(@NonNull List<Object> someList) {
return 1;
}
}
我想单元测试a并检查调用b的参数。因此,我认为:
@Test
void someTest() {
SomeClass obj = GuiceConfig.getInjector()
.getInstance(SomeClass.class);
SomeClass objSpy = Mockito.spy(obj);
ArgumentCaptor<List<Object>> captor =
ArgumentCaptor
.forClass(List.class);
// when(objSpy.B(captor.capture())).thenReturn(1);
doReturn(0).when(objSpy).B(captor.capture());
}
它没有模仿b,而是用null调用b的实际实现并引发一个npe。在上述问题中,有人建议使用doreturn解决这个问题,因为使用 when(objSpy.B(captor.capture)).thenReturn(0)
将执行底层方法。注意,如果我不使用@transactional,那么它就可以工作(调用失败时)
暂无答案!
目前还没有任何答案,快来回答吧!