在 JUnit / Mockito 测试中使用 Mocked 对象

Use Mocked object in JUnit / Mockito test

我有一个 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);
    }


}

当我在 setUp 中调用 new 时,我有 threadPoolExtendedExecutor=null。 我想插入一些模拟的 threadPoolExtendedExecutor 所以,我在调用它的方法时没有 NullPointer 问题(此时简单的接口模拟对我来说就足够了)

您可以使用(在设置中)

简单地模拟它

threadPoolExtendedExecutor = mock(ThreadPoolExtendedExecutor.class);

@Before
public void setUp() {
    threadPoolExtendedExecutor = mock(ThreadPoolExtendedExecutor.class);
    handler = new EventHandler(subBuffers, threadPoolExtendedExecutor);
}

您也可以让 MockitoJUnitRunner 为您完成: 不要忘记通过使用 @InjectMocks

注释在被测服务中注入模拟
@RunWith(MockitoJUnitRunner.class)
public class  EventHandlerTest  {

    @Mock
    ThreadPoolExtendedExecutor threadPoolExtendedExecutor;

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

@RunWith(MockitoJUnitRunner.class)
public class  EventHandlerTest  {

    @Mock
    ThreadPoolExtendedExecutor threadPoolExtendedExecutor;

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

手动创建模拟