Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用mockito清除依赖项_Java_Junit_Mockito - Fatal编程技术网

Java 无法使用mockito清除依赖项

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() {

我有一个简单的测试用例,我想模拟这个对象。然而,由于某种原因,我得到了空指针异常,因为orderDaoImpl没有被模拟出来

我是新来的,在这方面的任何帮助都是非常感谢的

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类注释,如果有)