有人可以帮助我使用下面的Mock对象.我想为ServiceImpl类编写一个模拟测试用例.我想模拟OrderIF接口:
public interface OrderIF{
List<Order> ordersFor(String type);
}
Run Code Online (Sandbox Code Playgroud)
服务的实施是:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码给出了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);
}
}
Run Code Online (Sandbox Code Playgroud)
@InjectMocks不会实例化或嘲笑你的课程.此注释用于将模拟注入此字段.
如果你想测试serviceImpl你将需要以这种方式模拟:
@Mock
private OrderIF order;
@InjectMocks
private Service reqService = new ServiceImpl();
Run Code Online (Sandbox Code Playgroud)
为了使它工作,你要么需要使用转轮或MockitoAnnotations.initMocks(this);在@Before方法.
我猜这order就是null你得到的NullPointerException:
when(order.ordersFor(type)).thenReturn(ll);
Run Code Online (Sandbox Code Playgroud)
为了@InjectMocks工作并实例化您的类,您需要添加一个运行程序:
@RunWith(MockitoJUnitRunner.class)
public class ServiceImplTest {
// ...
}
Run Code Online (Sandbox Code Playgroud)
您不必使用运行器,请参阅替代方案的文档。
| 归档时间: |
|
| 查看次数: |
34954 次 |
| 最近记录: |