Fixture
# Fixture

Um fixture ou test fixture (em português, dispositivo de teste) é um ambiente usado para testar consistentemente algum item, dispositivo ou parte de software. Os fixtures (dispositivos ou acessórios de teste) podem ser encontrados ao testar componentes eletrônicos, softwares e dispositivos físicos.

## Eletrônica

No teste de equipamentos eletrônicos, como placas de circuito, componentes eletrônicos e chips, um dispositivo de teste é um dispositivo ou configuração projetado para manter o dispositivo em teste no lugar e permitir que ele seja testado ao ser submetido a sinais de teste eletrônicos controlados.
Os exemplos são um testador de cama de pregos ou SmartFixture.

## Software

Um fixture de teste de software configura um sistema para o processo de teste de software ao inicializá-lo, satisfazendo assim quaisquer pré-condições que o sistema possa ter. Por exemplo, framework web Ruby on Rails usa YAML para inicializar um banco de dados com parâmetros conhecidos antes de executar um teste. Isso permite que os testes sejam repetidos, o que é um dos principais recursos de uma estrutura de teste eficaz.

### Configuração

Os fixtures de teste podem ser configurados de três maneiras diferentes: em linha, delegado e implícito.
* A configuração em linha cria o dispositivo de teste no mesmo método que o resto do teste. Embora a configuração em linha seja o dispositivo de teste mais simples de criar, ela leva à duplicação quando vários testes exigem os mesmos dados iniciais.
* A configuração delegada coloca o dispositivo de teste em um método auxiliar autônomo separado que é acessado por vários métodos de teste.
* A configuração implícita coloca o dispositivo de teste em um método de configuração que é usado para configurar vários métodos de teste. Isso difere da configuração de delegado porque a configuração geral de vários testes está em um único método de configuração, onde o dispositivo de teste é criado, em vez de cada método de teste ter seus próprios procedimentos de configuração e vincular-se a um dispositivo de teste externo.

### Vantagens e desvantagens

A vantagem de um dispositivo de teste é que ele permite que os testes sejam repetidos, uma vez que cada teste sempre começa com a mesma configuração. Os acessórios de teste também facilitam o design do código de teste, permitindo ao desenvolvedor separar métodos em funções diferentes e reutilizar cada função para outros testes. Além disso, os acessórios de teste pré-configuram os testes em um estado inicial conhecido, em vez de trabalhar com o que restou de uma execução de teste anterior. Uma desvantagem é que isso pode levar à duplicação de acessórios de teste se usar a configuração em linha.

### Práticas a evitar

É considerada uma prática ruim quando os acessórios de teste implícitos são muito gerais ou quando um método de teste configura um acessório de teste e não o usa durante o teste. Um problema mais sutil é se os métodos de teste ignoram certos campos dentro do dispositivo de teste. Outra prática ruim é uma configuração de teste que contém mais etapas do que o necessário para o teste; este é um problema visto na configuração em linha.
Um caso de teste é considerado "inseguro" quando modifica seu (s) acessório (s). Um caso de teste inseguro pode tornar os testes subsequentes inúteis, deixando o aparelho em um estado inesperado. Isso também faz com que a ordem dos testes seja importante: um dispositivo de fixação modificado deve ser redefinido se mais testes devem ser executados após um teste inseguro.

### Exemplos

Exemplos de acessórios incluem carregar um banco de dados com um conjunto específico de dados conhecido, apagar um disco rígido e instalar uma instalação de sistema operacional limpa conhecida, copiar um conjunto específico de arquivos conhecidos ou a preparação de dados de entrada, bem como configuração e criação de objetos fictícios.
O software usado para executar testes reproduzíveis sistematicamente em uma parte do software em teste é conhecido como cablagem de teste; parte de seu trabalho é configurar equipamentos de teste adequados.
No xUnit genérico, um dispositivo de teste é tudo o que deve estar instalado para executar um teste e esperar um resultado específico.
Freqüentemente, os fixtures são criados tratando dos eventos setUp e tearDown da estrutura de teste de unidade. Em setUp, cria-se o estado esperado para o teste e em tearDown limpa o que foi configurado.
Quatro fases de um teste:
* Configuração (set-Up)
* Exercício, interagindo com o sistema em teste
* Verificação, determinando se o resultado esperado foi obtido
* Destruição, para voltar ao estado original (tear down)