Exemplo dos testes TDD da Udemy, Curso de TDD, rspec e capybara do Jackson Pires. Exemplos completos, 115 aulas, 15:37:08.
-
Garantir a qualidade do software
-
Segurança e facilidade na manutenção
-
Melhor design de software
-
Documentação técnica
-
Testes devem ser confiáveis
-
Testes devem ser fáceis de escrever
-
Teste devem ser fáceis de entender hoje e no futuro
-
Não estamos focados em velocidade!
-
Setup: Quando você coloca o SUT (system under test, o objeto sendo testado) no estado necessário para o teste;
-
Exercise: Quando você interage com o SUT;
-
Verify: Quando você verifica o comportamento esperado;
-
Teardown: Quando você coloca o sistema no estado em que ele estava antes do teste ser executado. Rspec faz isto automaticamente.
BetterSpecs
http://www.betterspecs.org/br/
rspec spec
LET e LET! Exemplo
-
Let: Quando você precisa atribuir uma variável, ao invés de usar um bloco before para criar uma variável de instância, use let. Ao usar let, a variável é carregada apenas quando ela é utilizada pela primeira vez no teste e fica na cache até o teste em questão terminar.
-
Let!: Você pode usar let! Para forçar a invocação do método/helper antes de cada teste.
One-Liner Sintax - Exemplo
- expect(subject) == is_expected
“Descrições implícitas” it { … }
it { is_expected.to cover(2) }
it { is_expected.to cover(2, 5) }
Agregando Falhas - Exemplo
config.define_derived_metadata do |meta|
meta[:aggregate_failures] = true
end
it 'teste', :aggregate_failures do
...code...
end
Customizando Matchers - Exemplo
RSpec::Matchers.define :be_a_multiple_of do |expected|
# expected == 3
# actual == subject == 18
match do |actual|
actual % expected == 0
end
failure_message do |actual|
"expected that #{actual} would be a multiple of #{expected}"
end
description do
"be multiple of #{expected}"
end
end
Hooks - [Example[(https://github.com/rcoproc/testes_tdd/blob/master/spec/spec_helper.rb)
config.before(:suite) do
puts "antes de toda a suíte de testes"
end
-
before(:all) # antes de todos os testes
-
before(:context)
-
after(:all) # depois de todos os testes
-
after(:context)
-
before(:suite) # antes de toda a suite de testes
-
after (:suite) # depois de toda a suite de testes
-
before(:each) # antes de cada teste
-
before(:example)
-
after(:each) # depois de cada teste
-
after(:example)
Shared Examples - Exemplo
include_examples "name"
it_behaves_like "name"
it_should_behave_like "name"
DOUBLE - Exemplo
- Dublê de Teste é um termo genérico para qualquer objeto falso, utilizado no lugar de um objeto real, para propósitos de testes.
STUB - Exemplo
- Um stub nada mais é do que forçar uma resposta especíica para um determinado método de um objeto colaborador. "Stubs são para a fase de Stup, são usados para substituir estados".
MOCKS - Exemplo
- "Mocks são para a fase e Verify, sendo usados para testar comportamentos"