2016-04-22 167 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);