2016-04-22 11 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) 
} 

私は運がないと以下を試しています。ヌルインタラクションを受信します。

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);を使用する必要が動作するように。

関連する問題