Eu deveria usar as mesmas variáveis, através de toda a Unidade de Teste?

0

Pergunta

Eu sou a criação de Testes de Unidade em Java e para cada método, eu crio as mesmas listas, variáveis, etc. Por outro lado, é claro que eu pensei que eu poderia criar todas estas variáveis globais e definir seus valores no setup() método (em @Before), mas eu não tenho certeza se os valores podem ser alterados quando a execução de testes devido a multithreading, etc. Então, qual é a melhor forma para esta situação?

java junit junit5 testing
2021-11-23 13:33:22
1

Melhor resposta

2

Nada para se preocupar. JUnit vai criar uma nova instância da classe de teste e, em seguida, executar cada @Before o método, e só então executar o @Test o método, e faz que a música e a dança rotina tudo de novo para todos @Test anotada método na classe. Você está usando @Before exatamente como ele foi concebido: para armazenar o código de inicialização que é necessário para todos os testes em que classe de teste.

JUnit não é desta forma porque "teste de independência' é bom ter: Testes, de preferência, falhar ou passar independente da ordem em que você executá-los.

Muitas vezes, o processo init é tão caro que não vale a pena pagar o 'custo' de executá-lo uma e outra vez para cada teste. A anotação @BeforeClass existe especificamente para essa finalidade. O javadoc da @BeforeClass mesmo enuncia que isto compromete a testar a independência e, portanto, deve ser usado somente se o trabalho de configuração que você fizer no prazo de um tal método é bastante caro (computacionalmente, ou de outra forma) para fazer essa troca.

Em outras palavras:

Suas preocupações sobre o teste de independência são reais, mas eles se aplicam ao @BeforeClass. @Before não sofre deste problema; que o código for executado novamente para cada teste.

NB: Você pode colocar tudo isso para fora da janela, se tiver static coisas acontecendo. Não tem estático coisas no código de teste, a menos que você realmente saiba o que está fazendo. Eu suponho que você não tem que nesse caso - exercer, em seus testes são independentes.

2021-11-23 13:38:26

Muito obrigado, qualquer exemplo de código que mostra o uso correto?
rzwitserloot

Eu não entendi a diferença entre @BeforeClass e @Before. Qualquer esclarecimento pls?
Amadán

todos os métodos com @Before são executados antes de cada teste. Todos os métodos com @BeforeClass são executados apenas uma vez, antes de qualquer teste. Geralmente, você definir static coisas com @BeforeClass qual é, então, re-utilizado (por isso, os testes não são independentes). Você definir não-estático coisas com @Beforee assim os testes são independentes. Basta ler os documentos para estas anotações.
rzwitserloot

@BeforeClass (JUnit 5: @BeforeAll) é executado uma vez para toda a classe de teste, @Before (JUnit 5: @BeforeEach) é executado antes de cada método de teste.
rzwitserloot

Eu uso JUnit5, então eu vejo a diferença entre @BeforeEach vs @BeforeAll bem, a partir de suas explicações. No entanto, eu não tenho certeza se eu deveria ou não limpar as listas que são utilizados por várias teste. Eu ay precisa para desmarcá-las em @AfterEach. Alguma idéia?
avandeursen

Não limpar a lista. Ele também soa como você deve brincar com a volta um pouco isso, porque, evidentemente, um MODO de resposta não for suficiente para você. Isso é um bom instinto! Apenas.. fazer alguns testes, adicionar alguns elementos para uma lista inicializada apenas uma vez em @Beforee imprimir algumas coisas - sem retirar nada. Em seguida, basta observar o que acontece.

Sim, ele poderia ser jogado, mas eu acho que realmente é uma situação comum e tem de ser uma abordagem geral para isso. Então, eu só precisam ser esclarecidos sobre a Unidade de Teste de convenção para re-utilizar as mesmas variáveis (e.g. apenas a definição de uma vez no @BeforeEach OU @BeforeAll, desmarque as variáveis em @AfterEach. Então, o que é a abordagem correta para esta situação?. Alguma idéia?

Utilização @Before. Eu não tenho nenhuma idéia do que poderia ainda estar confuso você neste ponto. A resposta soletra-lo!

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................