gpt4 book ai didi

java - 使用 Mockito 模拟接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:37 25 4
gpt4 key购买 nike

有人可以帮我解决下面的 Mock 对象吗?我想为 ServiceImpl 类编写一个模拟测试用例。我想模拟 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:

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 不会实例化或模拟您的类。此注释用于将模拟注入(inject)此字段。

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

@Mock
private OrderIF order;

@InjectMocks
private Service reqService = new ServiceImpl();

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

关于java - 使用 Mockito 模拟接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36782687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com