Java 在JUnit/Mockito测试中使用模拟对象

Java 在JUnit/Mockito测试中使用模拟对象,java,junit,junit5,Java,Junit,Junit5,我有一个JUnit测试 public class EventHandlerTest { @Mock ThreadPoolExtendedExecutor threadPoolExtendedExecutor; private EventHandler handler; private Map<Queue<SenderTask>> subBuffers = new HashMap<>(); @Before

我有一个JUnit测试

public class  EventHandlerTest  {

    @Mock
    ThreadPoolExtendedExecutor threadPoolExtendedExecutor;

    private EventHandler handler;
    private Map<Queue<SenderTask>> subBuffers = new HashMap<>();


    @Before
    public void setUp() {
        // PROBLEM: threadPoolExtendedExecutor null!
        handler = new EventHandler(subBuffers, threadPoolExtendedExecutor);
    }


}
公共类EventHandlerTest{
@嘲弄
ThreadPoolExtendedExecutor ThreadPoolExtendedExecutor;
私有事件处理程序;
私有映射子缓冲区=新HashMap();
@以前
公共作废设置(){
//问题:threadPoolExtendedExecutor null!
handler=新的EventHandler(子缓冲区、threadPoolExtendedExecutor);
}
}
在安装程序中调用new时,我有
threadPoolExtendedExecutor=null

我想插入一些模拟的
threadPoolExtendedExecutor
,这样在调用它的方法时就不会出现
NullPointer
问题(现在对我来说,简单的接口模拟就足够了)

您可以使用(在设置中)简单地模拟它

threadPoolExtendedExecutor=mock(threadPoolExtendedExecutor.class)

您也可以让MockitoJUnitRunner为您做这件事: 不要忘记在您的测试服务中注入mock,方法是用@injectmock注释它

@RunWith(MockitoJUnitRunner.class)
public class  EventHandlerTest  {

    @Mock
    ThreadPoolExtendedExecutor threadPoolExtendedExecutor;

您可以使用(在设置中)简单地模拟它

threadPoolExtendedExecutor=mock(threadPoolExtendedExecutor.class)

您也可以让MockitoJUnitRunner为您做这件事: 不要忘记在您的测试服务中注入mock,方法是用@injectmock注释它

@RunWith(MockitoJUnitRunner.class)
public class  EventHandlerTest  {

    @Mock
    ThreadPoolExtendedExecutor threadPoolExtendedExecutor;

如果要在测试类字段上使用
@Mock
@InjectMocks
注释,则需要在类级别添加
@RunWith(MockitoJUnitRunner.class)

@RunWith(MockitoJUnitRunner.class)
public class  EventHandlerTest  {

    @Mock
    ThreadPoolExtendedExecutor threadPoolExtendedExecutor;

另一种方法是不使用上述注释,而是通过调用
org.mockito.mockito.mock()

手动创建mock。如果希望在测试类字段上使用
@mock
@InjectMocks
注释,则需要在类级别添加
@RunWith(MockitoJUnitRunner.class)

@RunWith(MockitoJUnitRunner.class)
public class  EventHandlerTest  {

    @Mock
    ThreadPoolExtendedExecutor threadPoolExtendedExecutor;

另一种方法是不使用上述注释,而是通过调用
org.mockito.mockito.mock()

手动创建模拟。您可以使用ThreadPoolExtendedExecutor ThreadPoolExtendedExecutor=mock(ThreadPoolExtendedExecutor.class)来创建模拟。您可以使用ThreadPoolExtendedExecutor ThreadPoolExtendedExecutor=mock来创建模拟(ThreadPoolExtendedExecutor.class)还可以看看@InjectMocks,它可以为您将模拟对象注入到单元测试类中,这样您就不必显式调用构造函数。另外两个选项是@Rakesh No,这不是InjectMocks真正做的。还可以看看@InjectMocks,它可以为您将模拟对象注入到单元测试类中,这样您就可以这样做了不必显式调用构造函数。还有两个选项是@Rakesh No,这不是InjectMocks真正要做的。