2016-05-25 14 views
0

をテストする方法他にあれば、私は更新インサートはすべて無効メソッドで削除するので、このコードはテスト不能であるこのとあまりにも多くの

List insert; 
List update; 
List delete 
for(SomeObject someObj : someObjects){ 
    if(isNew){ 
     insert.add() 
    } 
    else if(isUpdate){ 
     update.add(); 
    } 
    if(isDelete){ 
     delete.add() 
    } 
} 

//call update insert delete functions 

問題のように行くのコードを持っています。 私の質問は、ループを3回繰り返して、各タイプの結果をフィルタリングするロジックが動作しているかどうかをテストするリストを得ることです。私は< 100の要素がリストにあると予想しているので、それほどのコストはかかりません。

+0

リストの長さを確認して、リストが更新されているかどうか確認することができます –

+0

テストできないとはどういう意味ですか?ユニットテストはできませんか?私はあなたの問題を理解していません。 – zubergu

+0

はい私はそれを単体テストすることはできません、またはそれを完全に単体テストすることはできません。たとえば、コードをgetInsert()のように変更した場合、getUpdate()getDelete()を使用すると、より良いテストができます。もちろん、私は3回ループする必要があります。これを行うのがよいかどうか、あるいはこれを行うべきかどうかを理解したいだけです。 –

答えて

0

あなたはここで重要な依存関係を制御し、この方法が機能する状態にアクセスできるようにすることです

(sum of lists sizes after) == (sum of lists sizes before) + someObjects.size(); 
+0

はい、でも、コードをgetInsert()やgetUpdate()やgetDelete()のように変更した場合は、私はその事例について組み合わせることはできませんでした(例えば、 'new'と' delete')テストはより良いことができます。もちろん、私は3回ループする必要があります。私はちょうどこれを行うことが妥当かどうか、あるいはどちらかを選択するべきかを理解したい –

0

を確認することができます。私は、この例では、すなわち、SomeDaoをその依存関係を制御することができますので、私はdoSomethingComplicatedWithListsInAForLoopを操作かを把握することができます唯一の理由がある

interface SomeDao { 
    void add(SomeObject object); 
    void update(SomeObject object); 
    void delete(SomeObject object); 
} 

class SomeDaoStub implements SomeDao { 
    @Override public void add(SomeObject object) {} 
    @Override public void update(SomeObject object) {} 
    @Override public void delete(SomeObject object) {} 
} 

class SomeObject { 
    private final boolean isNew; 
    private final boolean isUpdated; 
    private final boolean isDeleted; 
    SomeObject(boolean isNew, boolean isUpdated, boolean isDeleted) { 
     this.isNew = isNew; 
     this.isUpdated = isUpdated; 
     this.isDeleted = isDeleted; 
    } 
    public boolean isNew() { 
     return isNew; 
    } 
    public boolean isUpdated() { 
     return isUpdated; 
    } 
    public boolean isDeleted() { 
     return isDeleted; 
    } 
} 

public void doSomethingComplicatedWithListsInAForLoop(Iterable<SomeObject> someObjects, SomeDao dao) { 
    for (SomeObject someObject : someObjects) { 
     if (someObject.isNew()) { 
      dao.add(someObject); 
     } else if (someObject.isUpdated()) { 
      dao.update(someObject); 
     } else if (someObject.isDeleted()) { 
      dao.delete(someObject); 
     } 
    } 
} 

@Test 
public void itDeletesObjectsMarkedToBeDeleted() { 
    final List<SomeObject> actualDeletedObjects = new ArrayList<>(); 
    List<SomeObject> expectedDeletedObjects = Arrays.asList(
      new SomeObject(false, false, true), 
      new SomeObject(false, false, true), 
      new SomeObject(false, false, true) 
    ); 
    SomeDao theDao = new SomeDaoStub() { 
     @Override 
     public void delete(SomeObject object) { 
      actualDeletedObjects.add(object); 
     } 
    }; 
    doSomethingComplicatedWithListsInAForLoop(expectedDeletedObjects, theDao); 
    assertEquals(expectedDeletedObjects, actualDeletedObjects); 
} 

:ここ

があることを示す一例です。

にはを挿入できない状態を呼び出すため、テストするのが難しい可能性があります。

関連する問題