Date post: | 06-May-2015 |
Category: |
Technology |
Upload: | stefan-kanev |
View: | 917 times |
Download: | 5 times |
Behavior-Driven Developmentс RSpec и CucumberСтефан Кънев
http://skanev.com/
27.06.2009, TechCamp.eu
Tuesday, April 27, 2010
Автоматизирано тестване
Tuesday, April 27, 2010
Unit Tests
Test-Driven Development
Behavior-Driven Development
Tuesday, April 27, 2010
1. Unit test-ове
2. Test-Driven
3. Behavior-Driven
4. RSpec
5. Cucumber
Tuesday, April 27, 2010
1. Unit test-ове
2. Test-Driven
3. Behavior-Driven
4. RSpec
5. Cucumber
Tuesday, April 27, 2010
class Programmer def implement_a_change(project, change) files = self.open_related_files(project, change) while true self.attempt_change(change, files) project.run() result = self.click_around_and_test(project) project.stop() break if result.successful? end self.commit_code(files) self.hope_everything_went_ok() endend
Tuesday, April 27, 2010
Repetitive...
Tuesday, April 27, 2010
...boring...
Tuesday, April 27, 2010
...error-prone
Tuesday, April 27, 2010
Машина, която да го прави вместо нас
Tuesday, April 27, 2010
Програма, която да го прави вместо нас
Tuesday, April 27, 2010
Unit Test
Tuesday, April 27, 2010
Пишем код, който проверява дали друг код
работи правилно.
Tuesday, April 27, 2010
С един бутон
Да Не
Tuesday, April 27, 2010
caladan:trane aquarius$ rake spec(in /work/trane)...............................................................................................................................................................................................................
Finished in 8.334414 seconds
207 examples, 0 failures
Tuesday, April 27, 2010
caladan:trane aquarius$ rake spec(in /work/trane).....................................................................................................................................................................................................F.........
1)'User should know something' FAILEDexpected: "something", got: "nothing" (using ==)./spec/models/user_spec.rb:32:
Finished in 8.123368 seconds
207 examples, 1 failure
Tuesday, April 27, 2010
I can has value?
Tuesday, April 27, 2010
Време
Tuesday, April 27, 2010
Regression testing
Tuesday, April 27, 2010
Tuesday, April 27, 2010
Tuesday, April 27, 2010
Tuesday, April 27, 2010
Tuesday, April 27, 2010
Документация(развален английски + стари версии = fun)
Tuesday, April 27, 2010
Спецификация
Tuesday, April 27, 2010
Tuesday, April 27, 2010
1. Unit test-ове
2. Test-Driven
3. Behavior-Driven
4. RSpec
5. Cucumber
Tuesday, April 27, 2010
Unit test-овете са просто инструмент
Tuesday, April 27, 2010
Test-Driven Development е подход към писането на софтуер
Tuesday, April 27, 2010
test-first
Tuesday, April 27, 2010
red/green/refactor
Tuesday, April 27, 2010
red/green/refactor
Възможно най-простия тест, който проверява функцио-налността и не минава.
Tuesday, April 27, 2010
red/green/refactor
Най-простата имплементация, която кара тестът да минава успешно.
Tuesday, April 27, 2010
red/green/refactor
Отстраняване на повторения, докато кодът не стане достатъчно качествен.
Tuesday, April 27, 2010
Tuesday, April 27, 2010
малки стъпки
Tuesday, April 27, 2010
Test-Driven Design
Tuesday, April 27, 2010
Преизползваемост
Tuesday, April 27, 2010
Low coupling
Tuesday, April 27, 2010
Добър интерфейс
Tuesday, April 27, 2010
scope creep
Tuesday, April 27, 2010
up-front design
Tuesday, April 27, 2010
1. Unit test-ове
2. Test-Driven
3. Behavior-Driven
4. RSpec
5. Cucumber
Tuesday, April 27, 2010
Test-Driven Development is not about testing
Tuesday, April 27, 2010
TDD ≠ QA
Tuesday, April 27, 2010
Опитните TDD-ри използват процеса за да открият поведението, което системата трябва
да има.
Tuesday, April 27, 2010
Behavior-Driven Development
Tuesday, April 27, 2010
BDD ≈ TDD++
Tuesday, April 27, 2010
"Getting the words right"
Tuesday, April 27, 2010
Test-Driven ⇒ Behavior-Driven
Tuesday, April 27, 2010
Assertion ⇒ Expectation
Tuesday, April 27, 2010
Test Method ⇒Code Example
Tuesday, April 27, 2010
Test Case ⇒ Example Group
Tuesday, April 27, 2010
Domain-Driven Design
Tuesday, April 27, 2010
Eric Evans
Domain Driven Design
Tuesday, April 27, 2010
Близки до проблемната област думи
Tuesday, April 27, 2010
Разбираем за бизнеса език
Tuesday, April 27, 2010
BDD = TDD + DDD(TLA FTW)
Tuesday, April 27, 2010
Tuesday, April 27, 2010
BDD = TDD + DDD
Tuesday, April 27, 2010
BDD = TDD + DDD
BDD = (T + D)DD
Tuesday, April 27, 2010
BDD = TDD + DDD
BDD = (T + D)DD
B = T + D
Tuesday, April 27, 2010
BDD = TDD + DDD
BDD = (T + D)DD
B = T + D
интензитет = време + доза
Tuesday, April 27, 2010
1. Unit test-ове
2. Test-Driven
3. Behavior-Driven
4. RSpec
5. Cucumber
Tuesday, April 27, 2010
Друг "синтаксис"
Tuesday, April 27, 2010
xUnit assert_equal 42, answer
Друг "синтаксис"
Tuesday, April 27, 2010
xUnit assert_equal 42, answer
RSpec answer.should equal(42)
Друг "синтаксис"
Tuesday, April 27, 2010
xUnit assert_equal 42, answer
RSpec answer.should equal(42)
English Answer should equal 42
Друг "синтаксис"
Tuesday, April 27, 2010
Tuesday, April 27, 2010
assert_equal 42, result
Tuesday, April 27, 2010
assert_equal 42, result result.should == 42
Tuesday, April 27, 2010
assert_equal 42, result result.should == 42assert result.nil?
Tuesday, April 27, 2010
assert_equal 42, result result.should == 42assert result.nil? result.should be_nil
Tuesday, April 27, 2010
assert_equal 42, result result.should == 42assert result.nil? result.should be_nilassert result.kind_of?(User)
Tuesday, April 27, 2010
assert_equal 42, result result.should == 42assert result.nil? result.should be_nilassert result.kind_of?(User) result.should be_kind_of(User)
Tuesday, April 27, 2010
assert_equal 42, result result.should == 42assert result.nil? result.should be_nilassert result.kind_of?(User) result.should be_kind_of(User)assert [], blog.posts
Tuesday, April 27, 2010
assert_equal 42, result result.should == 42assert result.nil? result.should be_nilassert result.kind_of?(User) result.should be_kind_of(User)assert [], blog.posts blog.should have(:no).posts
Tuesday, April 27, 2010
assert_equal 42, result result.should == 42assert result.nil? result.should be_nilassert result.kind_of?(User) result.should be_kind_of(User)assert [], blog.posts blog.should have(:no).postsassert 5, blog.posts.size
Tuesday, April 27, 2010
assert_equal 42, result result.should == 42assert result.nil? result.should be_nilassert result.kind_of?(User) result.should be_kind_of(User)assert [], blog.posts blog.should have(:no).postsassert 5, blog.posts.size blog.should have(5).posts
Tuesday, April 27, 2010
Tuesday, April 27, 2010
assert_raise(InvalidRecord) do user.save!end
Tuesday, April 27, 2010
assert_raise(InvalidRecord) do user.save!end
lambda { user.save! }.should raise_error(InvalidRecord)
Tuesday, April 27, 2010
assert_raise(InvalidRecord) do user.save!end
lambda { user.save! }.should raise_error(InvalidRecord)
assert_difference "User.count", 1 do user.create!end
Tuesday, April 27, 2010
assert_raise(InvalidRecord) do user.save!end
lambda { user.save! }.should raise_error(InvalidRecord)
assert_difference "User.count", 1 do user.create!end
lambda { user.save! }.should change { User.count }.by(1)
Tuesday, April 27, 2010
class Stack < Test::Unit::TestCase def set_up() @stack = Stack.new end def test_empty assert @stack.empty? @stack.push 42 assert [email protected]? end def test_pop @stack.push 42 @stack.push 5 assert_equal 5, @stack.pop assert_equal 42, @stack.pop asser_raise(StackEmptyError) { @stack.pop } endend
Tuesday, April 27, 2010
describe Stack do before(:each) do @stack = Stack.new end it "should be able to tell whether it is empty" do @stack.should be_empty @stack.push 42 @stack.should_not be_empty? end it "should pop the items in reverse order" do @stack.push 42 @stack.push 5 @stack.pop.should == 5 @stack.pop.should == 42 lambda { @stack.pop }.should raise_error(StackEmptyError) endend
Tuesday, April 27, 2010
describe Stack do context "(empty stack)" do it "should be empty" it "#pop should raise an exception" end context "(non-empty stack)" do it "should not be empty" it "#pop should return the top element" it "#pop should remove the top element" endend
Tuesday, April 27, 2010
Tuesday, April 27, 2010
1. Unit test-ове
2. Test-Driven
3. Behavior-Driven
4. RSpec
5. Cucumber
Tuesday, April 27, 2010
Feature: Manage posts In order to be able to spread wisdom the blogger wants to be able to write about anything he wants Scenario: Writing a new post Given that there are no posts And I am logged in When I go to the new post page And I fill "Title" with "F1rst p0st" And I fill "Content" with "This is my first post" And I press "Publish" Then I should be on the front page And I should see "This is my first post" And there should be a new post called "F1rst p0st"
Tuesday, April 27, 2010
Given /^I am logged in$/ doend
When /^I go to (.*?)$/ do |page|end
When /^I fill "([^\"]*)" with "([^\"]*)"$/ do |field, content|end
When /^I press "([^\"]*)"$/ do |button_name|end
Then /^I should be on (.*?)$/ do |page|end
Then /^I should see "([^\"]*)"$/ do |text1|end
Then /^there should be a new post called "([^\"]*)"$/ do |name|end
Tuesday, April 27, 2010
Tuesday, April 27, 2010