mockito spy在使用guice的事务类时调用实际类,而不是设置mock

2skhul33  于 2021-07-05  发布在  Java
关注(0)|答案(0)|浏览(229)

这个问题和这个问题相似,但解决办法不起作用。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,那么它就可以工作(调用失败时)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题