Questão nº 48
Questão de Engenharia de Software · FCC TRT24 2016 (nº 48)
Considere que foi criado um teste de funcionalidade com o Selenium e o JUnit, no qual foram usados uma aplicação web, o Selenium server e o Selenium test client com o JUnit, em condições ideais. O objetivo é testar o tamanho de um combo box em uma página jsp. O Selenium abrirá um browser, chamará a página e testará a combo box. A página é acessível pela url: `http://localhost:8080/teste/pagina.jsp`. Com a aplicação web e o servidor Selenium executando adequadamente, o teste com JUnit é mostrado no trecho de código abaixo.
```java
private static DefaultSelenium selenium;
I
public static void setup() {
String url = "http://localhost:8080";
selenium = new DefaultSelenium("localhost", 4444,
"*firefox /usr/lib/firefox/firefox-bin", url);
selenium.start();
}
II
public static void tearDown() {
selenium.stop();
}
III
public void testSelectedIdOfSizeComboBox() {
selenium.open("/teste/pagina.jsp");
assertEquals("medium", selenium.getSelectedId("size"));
}
```
Neste cenário, as lacunas I, II e III são correta e respectivamente preenchidas com as anotações
- A`@Before` − `@After` − `@TestRun`
- B`@BeforeClass` − `@AfterClass` − `@Test` (alternativa correta)
- C
@BeforeClass−@AfterClass−@Test(timeout==5000) - D`@BeforeObject` − `@AfterObject` − `@Test(expected.Exception.class)`
- E`@Before` − `@After` − `@Test(expected.IllegalArgumentException.class)`
Resposta comentada
Gabarito Alternativa B
JUnit utiliza anotações para organizar e controlar a execução dos testes, permitindo definir métodos que rodam antes ou depois dos testes, ou que marcam um método como sendo um teste.
(A) Incorreta: @Before e @After executam antes e depois de cada método de teste, respectivamente. Como os objetos selenium são static, eles devem ser inicializados e finalizados apenas uma vez por classe, não para cada teste. @TestRun não é uma anotação JUnit padrão.
(B) Correta: @BeforeClass é usada para métodos static que devem ser executados uma única vez antes de todos os testes da classe, ideal para inicializar recursos compartilhados como o DefaultSelenium. @AfterClass é usada para métodos static que devem ser executados uma única vez após todos os testes da classe, para liberar esses recursos. @Test marca um método como um método de teste JUnit.
(C) Incorreta: Embora @BeforeClass e @AfterClass estejam corretas, a anotação @Test(timeout==5000) possui sintaxe incorreta (deveria ser timeout = 5000L ou timeout = 5000). Além disso, o problema não especifica a necessidade de um timeout. Armadilha: A armadilha aqui é a sintaxe quase correta do timeout e a presença das anotações corretas para setup/teardown, levando o aluno a ignorar o erro de sintaxe ou a desnecessidade do timeout.
(D) Incorreta: @BeforeObject e @AfterObject não são anotações JUnit padrão. A sintaxe para expected também está incorreta (expected.Exception.class em vez de expected = Exception.class).
(E) Incorreta: @Before e @After são incorretas para setup/teardown static. A sintaxe para expected também está incorreta (expected.IllegalArgumentException.class em vez de expected = IllegalArgumentException.class).
Fonte: FCC TRT24 2016 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.