Какъв е вашият процес?
Днес ще си говорим как тестовете се вместват в него.
Какво е unit test и защо го пишем?
(това е въпрос към вас?)
xUnit
и производните винаги имат следните три концепции:
require 'minitest/autorun'
class UniverseTest < MiniTest::Unit::TestCase
def test_answer_is_positive
assert Universe.answer > 0
end
def test_equals_six_multiplied_by_nine
assert_equal 42, Universe.answer
end
end
describe Universe do
it "contains the answer of life and everything else" do
Universe.answer.should == 42
end
it "likes to give even answers" do
Universe.answer.should be_even
end
end
describe 'System under test' do
it 'has a specific behavior' do
# ...
end
end
describe
анотира групата
it
анотира конкретния тест
it
-а е самия тестdescribe 'System under test' do
it 'has a specific behavior' do
answer.should == 42
end
end
should нещо
Какви неща може да сложите след should
(или should_not
)
Проверява дали нещата са равни с ==
actual.should eq(expected)
actual.should_not eq(expected)
actual.should == expected
actual.should_not == expected
actual.should eq expected
Като съответните методи с ?
actual.should eql expected
actual.should equal expected
be_foo
проверява foo?
7.should_not be_zero
[].should be_empty
x.should be_multiple_of(3)
{a: 2}.should have_key(:a)
group.should have(3).users
assert_equal 3, group.users.size
describe 'Something' do
before do
@answer = 6 * 9
end
it 'is fourty-two' do
@answer.should eq 42
end
it 'is non-zero' do
@answer.should_not be_zero
end
end
Има и after
блок, аналогичен на before
describe 'Something' do
def answer
42
end
it 'has the answer' do
answer.should eq 42
end
end
На практика, мемоизиран метод
describe 'Answer to life' do
let(:answer) { 42 }
it 'is non-zero' do
answer.should_not be_zero
end
end