O teste de caixa branca exige que cada linha de código seja coberta pelo menos uma vez.
@ApimodelProperty ("categoria discípulo")@ManyToOne // Defina o campo Categoria de assunto para estar vazio @Joincolumn (Nullable = false) @jsonView ({ONUJSONVIEW.Class, mediçãounitCategoryjsonView.GetAllByDisciplineId.Class}) disciplina privada da disciplina;Tomando o exemplo anterior de definir o assunto não vazio como um caso, precisamos testar duas situações: exceções quando elas estão vazias e salvá -las normalmente quando não estão vazias.
@Testpublic void SaveTest () {Logger.debug ("Nova Unidade de Categoria de Medição"); MediçãounitUnitCategory MeasurementUnitCategory = new MeasurementUnitCategory (); Logger.debug ("Salvar teste"); mediçãoUnitCategoryService.Save (MeasurementUnitCategory);} Aqui chamamos o método save , mas IDE não nos levou a capturar a exceção, mas isso não significa que o método save não faça uma exceção. Ele pode lançar uma RuntimeException não verificada ou sua exceção derivada.
Para testar essa exceção, primeiro executamos essa linha de código para ver qual exceção aparece.
org.springframework.dao.dataIntegrityViolationException: não foi possível executar a instrução; Sql [n/a]; restrição [nula]; A exceção aninhada é org.hibernate.exception.ConstraintviolationException: não foi possível executar a declaração
Causado por: org.hibernate.exception.ConstraintviolationException: não foi possível executar a declaração
Causado por: org.h2.jdbc.jdbcsqLexception: null não permitido para a coluna "discipline_id"; Declaração SQL:
Inserir em medifuring_unit_category (id, discipline_id, is_asc) valores (null,? ,?) [23502-194]
Vemos três exceções, primeiro, JdbcSQLException ao inserir esse registro, então a exceção causa ConstraintViolationException , e a nova exceção causa DataIntegrityViolationException .
Isso Caused by é realmente um encapsulamento de exceção. Por exemplo, a camada subjacente pode lançar exceções, mas geralmente lidamos com exceções em um nível relativamente alto.
Tome isso como um exemplo. Os dados DataIntegrityViolationException violam exceções e muitos tipos de exceções podem ocorrer; portanto, os métodos de processamento dessa exceção são iguais ou semelhantes.
Quando a camada subjacente lança uma JdbcSQLException , chama seu método para catch a exceção e cria uma nova exceção ConstraintViolationException com a exceção (exceção de violação de restrição), o joga na camada superior e depois a captura para a camada superior, constrói uma nova exceção DataIntegrityViolationException e awica. Não lidamos com isso e, em seguida, o console relata um erro.
A vantagem de manter o encapsulação e o arremesso é que eu posso usar uma exceção para lidar com uma situação semelhante e, ao lidar com essa exceção, posso rastrear a fonte e manter preciso com o que a causou. Se este pacote não estiver disponível, precisamos ir diretamente catch exceções subjacentes para localizar com precisão o erro.
OK, a exceção que precisamos pegar aqui é a exceção DataIntegrityViolationException lançada a nós pelo aplicativo.
@Testpublic void SaveTest () {Logger.debug ("Preparação de dados básicos de teste"); MediçãounitUnitCategory MeasurementUnitCategory = new MeasurementUnitCategory (); Boolean CatchException = false; Logger.debug ("Salvar testes, espere lançar exceção"); tente {medusedUningUnitCategoryService.Save (MeasurementUnitCategory); } catch (DataIntegrityViolationException e) {CatchException = true; } logger.debug ("Afirme que a exceção de captura é verdadeira"); assertThat (CatchException) .Sistrue ();}Execute o teste e passe.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.