Os testes de integração (integration tests) verificam o comportamento de vários componentes do sistema. Por outras palavras, verificam se componentes autónomos, como um servidor e um cliente, se estão a integrar bem um com o outro.
O JUnit é uma biblioteca Java para escrever testes ao código. A sua utilização mais comum é para testes unitários, mas também pode ser usada para fazer testes de integração.
Um conjunto (suite) de testes JUnit correspondem a uma classe Java.
A classe seguinte contém dois testes:
package example.it;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
/** Integration test suite */
public class ExampleIT {
@Test
public void testSomething() {
// do something ...
Example example = new Example();
String result = example.doSomething();
// assertEquals(expected, actual);
assertEquals("Hello", result);
// if the assert fails, the test fails
}
@Test
public void testSum() {
Calculator calc = new Calculator();
int result = calc.sum(22, 7);
assertEquals(29, result);
}
}
Os testes utilizam funções de assert para verificar o resultado esperado de cada teste.
A forma normal é assertEquals(expected, actual),em que expected é o valor esperado e actual é o valor que resultou da execução.
No entanto, muitos outros existem, com nome que sugere qual a funcionalidade respetiva:
Como muitas vezes os testes têm partes repetitivas de código, é possível ter métodos anotados que são executados antes/depois de todos os testes da suite ou antes/depois de cada teste.
Os testes de integração com JUnit 5 usam as seguintes anotações para o papel dos métodos durante a execução de testes:
A classe seguinte mostra todas as anotações referidas:
package example.it;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
/** Integration test suite */
public class ExampleIT {
// static members - shared
// ...
// one-time initialization and clean-up
@BeforeAll
public static void oneTimeSetUp() {
// runs once before all tests in the suite
}
@AfterAll
public static void oneTimeTearDown() {
// runs once after all tests in the suite
}
// members
// ...
// initialization and clean-up for each test
@BeforeEach
public void setUp() {
// runs before each test
}
@AfterEach
public void tearDown() {
// runs after each test
}
// tests
@Test
public void testSomething() {
// do something ...
// assertEquals(expected, actual);
// if the assert fails, the test fails
}
}
Por convenção, as classes de testes de integração terminam com IT e devem ser arrumadas na pasta src/test/java do projeto.
Para executar testes de integração no Maven, é necessário configurar o plug-in failsafe no pom.xml:
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M4</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
O Maven executa os testes de integração na fase verify do ciclo de vida.
Os exemplos seguintes mostram como correr os testes de integração e como controlar quais os testes a executar.
// to compile and execute all integration tests $ mvn verify // to execute only a specific test class $ mvn verify -Dit.test=PingIT // to execute only a specific test $ mvn verify -Dit.test=PingIT#testPing // you can also use wildcards (the example below will match classes starting with P) $ mvn verify -Dit.test=P* // to skip integration tests $ mvn install -Dit.test.skip=true
© Docentes de Sistemas Distribuídos,
Dep. Eng. Informática,
Técnico Lisboa