2017-07-03 1 views
0

Ich habe den folgenden Code in meiner void Methode in ClassUnderTest KlasseEinheit Test von void-Methode mit einem eigenen Feldern - Linien Coverage

public void doSomething(){ 

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

    persistantObject.commitObj(a); 
} 

Ich weiß, wie eine vorübergehende JUnit zu schreiben, aber ich kann nicht herausfinden, Wie bekommt man eine 100% ige Reichweite?

ich versucht habe die folgende

@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

Sie möchten nur, dass Ihre 'doSomething'-Methode eine 100% ige Reichweite hat? – rafaelim

+0

du hast es Bruder! Ja! und möglicherweise auch die PIT-Berichterstattung! –

+0

Ich habe hier einige Codierungen gemacht und ich bekomme hier eine 100% Line-Coverage von 'doSomething' Methode. Welche Linie ist in Ihrem Test nicht abgedeckt? – rafaelim

Antwort

0

ist nicht Unittesting über Linie Abdeckung.

UnitTesting ist etwa Anforderung Abdeckung.

Leitungsabdeckung ist nur ein Werkzeug, um ein Gefühl dafür zu bekommen, wie viel von den Anforderungen bereits implementiert werden könnte.

egal Also nicht zu viel über die von Ihrem Test abgedeckt LOCS aber suchen Verhalten in Ihren Anforderungen, die ein gewisses Verhalten Ihren Schnittes braucht und prüfen, ob die von einem Test abgedeckt ist.


Außerdem Unittests nicht über LOCS aus einem anderen Grund Pflege: Die LOCS unterliegen während Refactoring und sich entwickelnden um die Anwendung ändern. Daher werden alle Anstrengungen, die Sie unternehmen können, um die Reichweite zu erhöhen, entweder zu einem Test führen oder die erforderlichen Änderungen verhindern (abhängig von Ihrem Vertrauen in Ihre Tests und/oder Ihre Fähigkeiten). Aber Fehlertests sollten nur fehlschlagen, wenn sich das Verhalten ändert, nicht der Code, der es implementiert.

+0

Ja. Der Jenkins-Build ist so eingerichtet, dass die eingecheckten Junits eine bestimmte Linie und PIT-Mutationsabdeckung passieren müssen. Diese Anforderung kommt von den DevOps, nicht von mir! –

+0

* "müssen eine bestimmte Linie UND PIT-Mutationsabdeckung bestehen. Diese Anforderung kommt von den DevOps" * Was ist der Wert, den sie erwarten? Ich habe festgestellt, dass man mit TDD 85% leicht erreichen kann. –

+0

"85% +" meinen Sie LoC oder PIT? Der Methodencode ist ziemlich groß und wurde bereits im Voraus implementiert. Ich versuche, die JUnit hinzuzufügen. Gibt es eine einfachere Lösung für dieses Problem als die erneute Durchführung der Arbeit? –

Verwandte Themen