0
votes

Ajout de la couverture de code pour le bloc de capture dans la botte à ressort

Utilisation de 2.1.6.Release

Ceci est ma classe ServiceImpl avec la méthode Repo.Save, en cas de DB Dupliquer, nous attrapons l'exception et le retour de la réponse < Pré> xxx

Je ne suis pas capable d'ajouter une couverture de code pour le bloc de capture. Ma classe de test est xxx

avec la manière ci-dessus, je reçois ci-dessous l'erreur xxx

Comment puis-je jeter une exception dont je vais jeter une exception dont Code> getCause est contrainteViolationException de sorte que toutes les lignes sont couvertes par test


4 commentaires

Avez-vous essayé de lancer un type d'exception différent?


Oui, mais cela ne couvre pas exception ligne


S'il est de type contrainteViolationException, oui, si vous lancez une exception, non. Avez-vous lu le code que vous essayez de tester? Que MyException n'est lancée que si votre bloc d'essai jette une contrainteViolationException


@Sultuske Comment puis-je jeter une exception dont getCause est contrainteViolationException de sorte que toutes les lignes sont couvertes de tests


3 Réponses :


0
votes

Vous devez jeter le contrainteViolationException , car Enregistrer la méthode ne jette aucune exception vérifiée en fonction de la définition de méthode de sa méthode Enregistrer < Pré> xxx


5 commentaires

Lancer RunTimeException ne couvre pas la ligne Je dois aussi définir @test (attendu = runtimédiesception.class)


lancer le contrainteViolationException Vous devriez être bon @Kedarjavalkar


Comment lancer une exception dont getCause est contrainteViolationException de sorte que toutes les lignes sont couvertes dans les tests


Avez-vous essayé mon code? Si vous essayez mon code, votre code dans le bloc d'exception sera couvert. @Kedarjavalkar


Oui, j'ai essayé., J'ai besoin d'une exception dont la cause est contrainteViolationException



1
votes

Vous devez tester deux cas d'utilisation dans votre bloc de capture:

lorsque la cause d'exception est contrainteViolationException xxx

lorsque la cause de l'exception n'est pas contrainteViolationException xxx

pour ce cas @ExpecyException serait runtimédiexception < / p>


1 commentaires

Merci, ça a fonctionné. Le contrainteViolationException provient de org.hibernate.Exception . Par conséquent, utilisé .thenthenthrow (Nouvelle RunTimeException (nouvelle contrainteViolationException ("champ non unique", null, "titre")))



0
votes

Vous pouvez également tester des exceptions avec @Rule et EvoustyException à Junit.

@SpringBootTest
@RunWith(SpringRunner.class)
public class CoreVoucherServiceTest {

    @Autowired
    private CoreVoucherService coreVoucherService;

    @MockBean
    private VoucherRepository voucherRepository;

    @Rule
    public ExpectedException exceptionRule = ExpectedException.none();

    @Test
    // @Test(expected = MyException.class)
    public void createVoucherTest() {
        exceptionRule.expect(Exception.class); // Better if you specify specific Exception class that is going to be thrown.
        VoucherDTO dto = prepareCreateVoucher();
        when(voucherRepository.save(any())).thenThrow(Exception.class);
        coreVoucherService.createVoucher(dto);
    }
}


0 commentaires