使用 Mockito 模拟接口

新手上路,请多包涵

有人可以帮我解决下面的 Mock 对象吗?我想为 ServiceImpl 类编写一个模拟测试用例。我想模拟 OrderIF 接口:

 public interface OrderIF{
    List<Order> ordersFor(String type);
}

服务的实现是:

 public class ServiceImpl implements Service {
    private List <Order> orders ;
    private OrderIF orderif ; // this is 3rd party interface

    public int getval(String type) {
       //some code

       // this returns a list of objects (orders)
       orders = orderif.ordersFor(type);

       // some code
       return orders.get(0)
    }
}

我的代码给出 NullPoinerException:

 public class ServiceImplTest {
     private List <Order> ll ;
     private service reqService ;

     @InjectMocks
     private orderIF order;

     @Before
     public void setUp() throws Exception {
         ll = new ArrayList<Order> ();
         ll.add(new Order("Buy"  ,  11 , "USD" ));
         ll.add(new Order("Sell" ,  22 , "USD" ));
         reqService = spy(new ServiceImpl());
     }

     @Test
     public void test() {
        String type= "USD" ;
        when(order.ordersFor(type)).thenReturn(ll);
        q = reqService.getval(type);
        assertTrue(q.get().ask == 232.75);
    }
}

原文由 Mike 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 893
1 个回答

@InjectMocks 不会实例化或模拟您的课程。此注释用于将模拟注入此字段。

如果你想测试 serviceImpl 你需要这样模拟:

 @Mock
private OrderIF order;

@InjectMocks
private Service reqService = new ServiceImpl();

要使其工作,您需要在 @Before 方法中使用 runner 或 MockitoAnnotations.initMocks(this);

原文由 Sergii Bishyr 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题