Java 在JUnit/Mockito测试中使用模拟对象
我有一个JUnit测试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
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真正要做的。