有人可以帮我处理下面的 Mock 对象吗?我想为 ServiceImpl 类编写一个模拟测试用例.我想模拟 OrderIF 接口:
Can someone please help me with the below Mock object. I want to write a mock test case for ServiceImpl class. I want to mock OrderIF interface:
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:
My code give 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); } } 推荐答案@InjectMocks 不会实例化或模拟您的类.该注解用于将模拟注入该字段.
@InjectMocks will not instantiate or mock your class. This annotation is used for injecting mocks into this field.
如果你想测试serviceImpl,你需要以这种方式模拟:
If you want to test serviceImpl you will need to mock in this way:
@Mock private OrderIF order; @InjectMocks private Service reqService = new ServiceImpl();要使其工作,您需要在 @Before 方法中使用 runner 或 MockitoAnnotations.initMocks(this);.
To make it work you either need to use runner or MockitoAnnotations.initMocks(this); in @Before method.
更多推荐
使用 Mockito 模拟界面
发布评论