Pular para o conteúdo principal

Questão de Engenharia de Software — Ferramentas para Teste (JUnit, FindBugs, etc.) — CESPE / CEBRASPE 2025

Engenharia de SoftwareFerramentas para Teste (JUnit, FindBugs, etc.)
Código
ce417760
Banca
CESPE / CEBRASPE
Órgão
TRF 6
Ano
2025
Cargo
AJ TRF6

No que se refere a testes de verificação de qualidade de códigos automatizados e a persistência, julgue o item a seguir.

 

Nos testes com Jasmine, o comando beforeAll pode ser utilizado com promises ou funções assíncronas (como async ou await), para garantir que o código de preparação seja executado de forma assíncrona, antes dos testes.

  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Jasmine: beforeAll com funções assíncronas

✅ CERTO. O comando beforeAll do Jasmine pode, sim, ser utilizado com promises ou funções assíncronas (async/await), garantindo que o código de preparação seja executado de forma assíncrona antes dos testes. O framework aguarda a resolução da promise ou a conclusão da função assíncrona antes de executar os testes do bloco.

O Jasmine é um framework de testes JavaScript amplamente utilizado, especialmente em aplicações front-end e Node.js. Ele fornece funções de configuração e limpeza que permitem organizar o ciclo de vida dos testes. Entre elas, destacam-se beforeAll, afterAll, beforeEach e afterEach. O beforeAll é executado uma única vez, antes de todos os testes do bloco em que está definido, sendo ideal para inicializar recursos que serão compartilhados entre os testes, como conexões com banco de dados, carregamento de módulos ou configuração de estado global.

A grande questão aqui é o suporte a operações assíncronas. Em versões modernas do Jasmine (a partir da versão 2.0), é possível passar uma função assíncrona ou uma função que retorna uma promise para beforeAll. O Jasmine aguardará a conclusão dessa operação antes de prosseguir com a execução dos testes. Isso é crucial porque, em aplicações reais, a preparação de dados frequentemente envolve chamadas a APIs, consultas a bancos de dados ou leitura de arquivos, operações que são naturalmente assíncronas. Sem esse suporte, o desenvolvedor teria que recorrer a técnicas complexas de sincronização, como callbacks aninhados ou variáveis de controle, o que tornaria o código de teste confuso e propenso a erros.

Na prática, o uso é simples. Considere um cenário em que um teste precisa de um usuário cadastrado no banco de dados antes de ser executado. Com o Jasmine, você pode escrever:

beforeAll(async () => {
  await criarUsuarioNoBanco({ nome: 'João' });
});

it('deve retornar o usuário cadastrado', async () => {
  const usuario = await buscarUsuario('João');
  expect(usuario).toBeDefined();
});

Nesse exemplo, o Jasmine aguarda a promise retornada pela função criarUsuarioNoBanco ser resolvida antes de executar o teste. Se a operação falhar, o teste é marcado como falho, e a mensagem de erro é exibida. Essa mesma lógica se aplica ao beforeEach, afterEach e afterAll, que também aceitam funções assíncronas.

É importante distinguir o beforeAll de outros hooks. O beforeEach é executado antes de cada teste individual, enquanto o beforeAll é executado apenas uma vez. Essa distinção é fundamental para decidir onde colocar a preparação de dados: se a preparação é cara e pode ser compartilhada, use beforeAll; se cada teste precisa de um estado limpo e isolado, use beforeEach. O suporte a assincronismo, no entanto, é comum a todos eles.

A banca explora aqui um ponto que muitos candidatos desconhecem: a capacidade de hooks de teste lidarem com operações assíncronas. Muitos assumem que beforeAll é estritamente síncrono, o que seria um grande limitador em aplicações modernas. O Jasmine, assim como outros frameworks como Jest e Mocha, evoluiu para suportar esse padrão, tornando o código de teste mais limpo e confiável.

Guarde este critério: a capacidade de usar async/await ou promises nos hooks de configuração é uma característica padrão dos frameworks de teste modernos, e o Jasmine não é exceção. É exatamente isso que a questão cobra.

  1. 1beforeAll
  2. 2beforeEach
  3. 3Testes (it)
  4. 4afterEach
  5. 5afterAll
LEVEL · soulevel.com.br

Item — ✅ Correto ⟵ GABARITO

A afirmação está correta. O beforeAll do Jasmine aceita funções assíncronas e promises. O framework aguarda a conclusão da operação assíncrona antes de executar os testes, garantindo que o ambiente de teste esteja devidamente preparado. Esse comportamento é essencial para testes que dependem de recursos externos, como bancos de dados ou APIs, e é uma funcionalidade documentada e amplamente utilizada.

NÃO CAIA NESSA!

Na prova, lembre-se de que os hooks beforeAll, beforeEach, afterEach e afterAll do Jasmine (e de frameworks similares como Jest e Mocha) suportam operações assíncronas. Se a questão afirmar que eles são estritamente síncronos, está errada. Essa é uma pegadinha recorrente em concursos de TI.

Gabarito: letra C (Certo).

Link permanente: /questoes/ce417760