2016-04-22 90 views
1

有人可以请帮我下面的Mock对象。 想写这个类的模拟测试用例。想模拟接口嘲笑与Mockito的接口

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) 
} 

我想下面没有运气。接受nullpoinerexcetion。

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); 
    } 
} 
+0

而你的代码在哪里提出NPE? – Ralf

回答

2

我猜ordernull和你在这里得到了NullPointerException

when(order.ordersFor(type)).thenReturn(ll); 

对于@InjectMocks工作和实例类,你需要添加一个亚军:

@RunWith(MockitoJUnitRunner.class) 
public class ServiceImplTest { 
    // ... 
} 

您不必使用跑步者,请参阅the documentation的替代品。

0

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

如果你想测试serviceImpl你需要以这种方式来嘲笑:

@Mock 
private orderIF order; 

@InjectMocks 
private service reqService = new serviceImpl(); 

为了使它工作,你要么需要在@Before方法使用转轮或MockitoAnnotations.initMocks(this);