Java 无法使用mockito清除依赖项
我有一个简单的测试用例,我想模拟这个对象。然而,由于某种原因,我得到了空指针异常,因为orderDaoImpl没有被模拟出来 我是新来的,在这方面的任何帮助都是非常感谢的Java 无法使用mockito清除依赖项,java,junit,mockito,Java,Junit,Mockito,我有一个简单的测试用例,我想模拟这个对象。然而,由于某种原因,我得到了空指针异常,因为orderDaoImpl没有被模拟出来 我是新来的,在这方面的任何帮助都是非常感谢的 public class OrderBusinessImplTest extends TestCase { //Stub-out the dependency @Mock OrderDAOImp orderDao; @Before public void setup() {
public class OrderBusinessImplTest extends TestCase {
//Stub-out the dependency
@Mock
OrderDAOImp orderDao;
@Before
public void setup()
{
//We need this because at runtime it will scan all the references of OrderDao and mock the object
System.out.println("Hey");
MockitoAnnotations.initMocks(this);
}
@Test
public void testPlaceOrder() throws SQLException, BOException {
OrderBusinessImpl orderBusiness=new OrderBusinessImpl();
orderBusiness.setDao(orderDao);
//When is an important method which is used to mock out the object call
Order order= new Order();
//Set the expectations
when(orderDao.createOrder(order)).thenReturn(new Integer(1));
boolean results=orderBusiness.placeOrder(order);
//Verify the results
assertTrue(results);
verify(orderDao.createOrder(order));
}
}
结果:
java.lang.NullPointerException
在OrderBO.OrderBusinessImplTest.testPlaceOrder(OrderBusinessImplTest.java:40)
调试后,我发现orderDao为null,当我尝试调用这个orderDao.createOrder(order)时,它导致了一个异常。出于某种原因,扩展
测试用例使JUnit在方法之前不运行。您可能已经注意到,因为您也有此日志行:
System.out.println(“嘿”)代码>
如果你真的想扩展TestCase
,你需要移动MockitoAnnotations.initMocks(这个)在您的测试方法testPlaceOrder
中使用code>(最好作为第一行),并在方法之前去掉
但更好的选择是添加注释:
@RunWith(MockitoJUnitRunner.class)
到您的测试类OrderBusinessImplTest
(并在方法之前删除),因为这样您将自动初始化mock(因此没有任何initmock(this)
)
在任何情况下,考虑是否确实需要扩展TestCase
此外您的最后一次验证应如下所示:
verify(orderDao).createOrder(order);
出于某种原因,扩展TestCase
会使JUnit在方法之前不运行。您可能已经注意到,因为您也有此日志行:
System.out.println(“嘿”)代码>
如果你真的想扩展TestCase
,你需要移动MockitoAnnotations.initMocks(这个)在您的测试方法testPlaceOrder
中使用code>(最好作为第一行),并在方法之前去掉
但更好的选择是添加注释:
@RunWith(MockitoJUnitRunner.class)
到您的测试类OrderBusinessImplTest
(并在方法之前删除),因为这样您将自动初始化mock(因此没有任何initmock(this)
)
在任何情况下,考虑是否确实需要扩展TestCase
此外您的最后一次验证应如下所示:
verify(orderDao).createOrder(order);
您需要添加OrderBusinessImplTest注释(或/和TestCase类注释,如果有)您需要添加OrderBusinessImplTest注释(或/和TestCase类注释,如果有)