Pular para o conteúdo
SDETRole
SDETRole

Glossário · Automação de UI

Test fixture

Também chamado de: fixture, fixtures, test fixtures, fixture de teste

Definição

A preparação fixa de que um teste precisa antes de rodar, como uma página do navegador, um usuário criado ou um banco de dados, mais o teardown que limpa tudo depois.

Uma test fixture é tudo aquilo de que um teste depende e que não é o comportamento sob teste: os objetos, dados, conexões e o ambiente que precisam estar em um estado conhecido antes de o primeiro passo rodar. Uma boa fixture prepara esse estado sempre da mesma forma e o desmonta depois (teardown), para que cada teste comece limpo. A palavra também é usada de forma mais ampla para arquivos estáticos de massa de dados, como os arquivos JSON que o Cypress carrega com cy.fixture().

Exemplo (Playwright)

No Playwright, fixtures são um recurso de primeira classe. As nativas, como page e request, são injetadas pelo nome, e você adiciona as suas com test.extend:

import { test as base, expect } from '@playwright/test';
import { TodoPage } from './todo-page';

type Fixtures = { todoPage: TodoPage };

export const test = base.extend<Fixtures>({
  todoPage: async ({ page }, use) => {
    const todoPage = new TodoPage(page);   // setup
    await todoPage.goto();
    await use(todoPage);                   // the test runs here
    await todoPage.removeAll();            // teardown
  },
});

test('adds an item', async ({ todoPage }) => {
  await todoPage.add('Write the glossary');
  await expect(todoPage.items).toHaveCount(1);
});

As fixtures só são criadas quando um teste pede por elas, podem depender de outras fixtures e podem ter escopo por teste (padrão) ou por worker, com { scope: 'worker' }, para recursos caros.

Exemplo (JUnit 5)

Em frameworks no estilo xUnit, a fixture fica nos métodos de ciclo de vida:

class CartServiceTest {
    private CartService cart;

    @BeforeEach
    void setUp() {
        cart = new CartService(new InMemoryCartRepository());
    }

    @AfterEach
    void tearDown() {
        cart.clear();
    }

    @Test
    void emptyCartHasZeroTotal() {
        assertEquals(0, cart.total());
    }
}

@BeforeAll e @AfterAll rodam uma vez por classe e, por padrão, precisam ser static.

Erros comuns

  • Compartilhar estado mutável da fixture entre testes. Um usuário com escopo de worker que os testes modificam vai causar falhas que dependem da ordem de execução.
  • Pular o teardown quando um teste falha. Coloque a limpeza na fixture (depois do use) ou no @AfterEach, e não no fim do corpo do teste.
  • Uma fixture gigante para tudo. Fixtures pequenas e combináveis deixam claro do que cada teste depende.

Digite para buscar em todo o SDETRole.

Busca de texto completo com Pagefind · roda no seu navegador Abrir página de busca →