2017-07-03 1 views
0

私はClassUnderTestクラスユニットテスト - ラインカバレッジ

public void doSomething(){ 

    A a = new A(); 
    a.setAb("b"); 
    a.setAc("c"); 

    persistantObject.commitObj(a); 
} 

の私void方法で次のコードを持って、私は渡すのJUnitを書く方法を知っているが、しかし、私は把握することはできませんどのように100%のラインカバレッジを得るか。

私が試みられてきた以下の

@Mock 
private PersistantObject mockPersistantObject; 
public void testDoSomething(){ 

    EasyMock.createMock(this); 
    ClassUnderTest classUnderTest = new ClassUnderTest(); 
    ReflectionTestUtils.setField(classUnderTest, "persistantObject", mockPersistantObject); 

    A a = new A(); 
    a.setAb("b"); 
    a.setAc("c"); 

    mockPersistantObject.commitObj(a); 
    EasyMock.expectLastCall(); 

    EasyMock.replay(this); 
    classUnderTest.doSomething(); 
    ... 
    EasyMock.verify(this); 
} 
+1

あなたの 'doSomething'メソッドに100%のカバレッジを持たせたいだけですか? – rafaelim

+0

あなたはそれを兄弟!はい!おそらくPITのカバレッジも! –

+0

私はここでコーディングをしました。ここで 'doSomething'メソッドの100%ラインカバレッジを取得しています。あなたのテストでは、どのラインがカバーされていませんか? – rafaelim

答えて

0

単体テストはない程度ラインカバレッジです。

ユニットテストは約要件です。

ラインカバレッジは、要件のうちどれがすでに実装されているかについての感触を得るためのツールにすぎません。

は、だからあなたのテストでカバーLOCSについてはあまり気にしますが、あなたのカットの特定行動を必要とするあなたの要件、中行動を探し、それがテストで覆われているかどうかをチェックしません。


さらにユニットテストは、別の理由でLOCSを気にしない:LOCSは、アプリケーションをリファクタリングし、進化中に変更される場合があります。したがって、ラインカバレッジを増やすためにあなたが行う可能性のある努力は、テストを破ることにつながるか、必要な変更を防ぐことになります(テストやスキルに対するあなたの信頼に依存します)。しかし、の動作がに変更された場合にのみUnittestsが失敗し、それを実装するコードでは失敗します。

+0

はい..Jenkinsのビルドは、Junitsのチェックインが特定の行とPIT突然変異範囲を通過するように設定されています。この要件はDevOpsからのものであり、私のものではありません。 –

+0

* "は、特定の行とPIT突然変異カバレッジに合格する必要があります。この要件は、開発者からのものです。*彼らが期待する価値は何ですか?私はあなたがTDDをすることで簡単に85%以上を得ることができることを発見しました。 –

+0

"85%+"あなたはLoCかPITを意味しますか?メソッドコードはかなり大きく、事前に実装されています。私はそれにJUnitを追加しようとしています。作業をやり直す以外にも、この問題に対するより直接的な解決策がありますか? –