2017-04-10 14 views
0

すでに質問されている質問はたくさんありますが、私の場合は本当に役に立つ情報はありません。模擬クラスのフィールドを変更するメソッドをテストする

私はメソッドをテストしたいと思っています。これはクラスAとそのvoidにあり、クラスBからいくつかのメソッドを呼び出して、そのフィールドを変更またはチェックします。ここで

は一例です:

public class A { 
private B b; 

public A(B b){ 
    this.b = b; 
} 

public void checkStageOne(Worksheet ws){ 
    if(long statement){ 
     if(B.checkStorage(ws)){ 
      ws.setThing("Nasty"); 
     } 
     else { ws.setStatus("Not so nasty"); } 
    } 
} 

はLinkedListsが何とか埋めていると言うことができます。クラスA checkStageOne()のパラメータは、

public class B { 
private LinkedList<Worksheet> sheetList = new LinkedList<>(); 
private LinkedList<UsedParts> upList = new LinkedList<>(); 
private LinkedList<UsedParts> matList = new LinkedList<>(); 


public boolean checkStorage(int id){ 
    for(UsedParts up : upList){ 
     if(up.getSheetID()== id){ 
      for(Material mat : matList){ 
       if(up.getMatID() == mat.getMatID()){ 
        if(mat.getQuantity() - up.getQuantityNeeded() < 0){ 
         return false; 
        } 
       } 
      } 
     } 
    } 
    return true; 
} 

は、私はクラスBをモックするクラスBにリストに含まれているが、私は、私も結果をテストし、その後Bのフィールド偽物と可能性がどのように絶対にないアイデアを持っていませんそれらの上に。私が知っているのは、EasyMock.expectLastCall()でvoidをテストできることです。しかし、私は本当に断言していたかどうかを確認する必要があります。

ご意見はありますか?

VBR、

+0

:このような

何か LinkedListのmock1 =モック(LinkedList.class)。 LinkedList mock2 = mock(LinkedList.class); LinkedList mock3 = mock(LinkedList.class); 新規B(mock1、mock2、mock3); あなたはそれらのモックとのやりとりがあったかどうかを確認できます –

+0

ありがとう、いい考えです。あなたはEasyMockでそれをチェックする方法を知っていますか? – assaultpig

答えて

0

assaultpig はコメントあなたに答えるために、あなたはEasyMockと同じことを行います。

しかし、私はあなたがしなければならないものではない、Bを模倣したいと思います。ちょうど模擬B。次にcheckStorageについてのみ、Aをテストするためにtrueまたはfalseを返します。あなたは3 linkedListsを受け付けBのコンストラクタを作成し、Bのテストインスタンスの作成mockito使用することができます

B b = mock(B.class); 
Worksheet ws = mock(Worksheet.class); 
A a = new A(b); 
expect(b.checkStorage()).andReturn(true); // expect one call to checkStorage to return true 
ws.setThing("Nasty"); // expect setThing to be called 

replay(b, ws); 

a.checkStageOne(ws); // will call checkStorage that will return true 

verify(b, ws); // will make sure setThing was called 
関連する問題