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