Utilisation de 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 p> < Pré> xxx pré> Je ne suis pas capable d'ajouter une couverture de code pour le bloc de capture. Ma classe de test est p> avec la manière ci-dessus, je reçois ci-dessous l'erreur p> Comment puis-je jeter une exception dont je vais jeter une exception dont Code> getCause code> est 2.1.6.Release CODE>
contrainteViolationException code> de sorte que toutes les lignes sont couvertes par test p> p>
3 Réponses :
Vous devez jeter le contrainteViolationException code>, 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 pré> p>
Lancer RunTimeException code> ne couvre pas
la ligne code> Je dois aussi définir
@test (attendu = runtimédiesception.class) code>
lancer le contrainteViolationException code> Vous devriez être bon @Kedarjavalkar
Comment lancer une exception dont getCause code> est
contrainteViolationException code> 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 code>
Vous devez tester deux cas d'utilisation dans votre bloc de capture:
lorsque la cause d'exception est lorsque la cause de l'exception n'est pas pour ce cas contrainteViolationException code> p>
contrainteViolationException code> p>
@ExpecyException code> serait
runtimédiexception code> p> < / p>
Merci, ça a fonctionné. Le contrainteViolationException code> provient de
org.hibernate.Exception code>. Par conséquent, utilisé
.thenthenthrow (Nouvelle RunTimeException (nouvelle contrainteViolationException ("champ non unique", null, "titre"))) code>
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); } }
Avez-vous essayé de lancer un type d'exception différent?
Oui, mais cela ne couvre pas
exception code> 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 code> est
contrainteViolationException code> de sorte que toutes les lignes sont couvertes de tests