2017-07-03 1 views
0

Je Toutefois, le code suivant dans ma méthode void dans ClassUnderTest classetest unitaire de la méthode vide avec des champs privés - couverture de ligne

public void doSomething(){ 

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

    persistantObject.commitObj(a); 
} 

Je sais comment écrire un JUnit de passage, je ne peux pas comprendre comment obtenir une couverture de 100%.

J'ai essayé les suivantes

@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

Vous voulez juste que votre méthode 'doSomething' ait 100% de couverture de ligne? – rafaelim

+0

vous l'avez frère! Oui! et éventuellement la couverture PIT aussi! –

+0

J'ai codé ici et j'obtiens une couverture de 100% de la méthode 'doSomething' ici. Quelle ligne n'est pas couverte dans votre test? – rafaelim

Répondre

0

UnitTesting est pas au sujet de la couverture ligne.

UnitTesting est environ exigence couverture.

La couverture de ligne est juste un outil pour avoir une idée de la quantité de exigences déjà mises en œuvre qui pourraient être couvertes.

Alors ne se soucient pas trop sur les lignes de crédits couverts par votre test mais cherchez comportement dans vos exigences, qui a besoin d'un certain comportement de votre coupe et vérifier si cela est couvert par un test.


De plus UnitTests ne se soucient pas pour une autre raison lettres de crédit: Les lettres de crédit sont sujets à changement au cours de refactoring et l'évolution de l'application. Par conséquent, tout effort que vous pouvez faire pour augmenter la couverture de la ligne mènera à un test de rupture ou empêchera les changements requis (selon votre confiance dans vos tests et vos compétences). Mais Unittests ne devrait échouer que si le comportement change, pas le code qui l'implémente.

+0

Oui ... La construction Jenkins est configurée pour que les Junits enregistrés passent une certaine ligne et une couverture de mutation PIT. Cette exigence vient des DevOps, pas de moi! –

+0

* "doivent passer une certaine ligne et la couverture de mutation PIT.Cette exigence vient des DevOps" * Quelle est la valeur qu'ils s'attendent? J'ai trouvé que vous pouvez facilement obtenir 85% + en faisant TDD. –

+0

"85% +" voulez-vous dire LoC ou PIT? Le code de la méthode est assez grand et a déjà été mis en œuvre à l'avance. J'essaie d'ajouter le JUnit à cela. Y a-t-il une solution plus directe à ce problème autre que refaire le travail? –