Upload
ugur-oezyilmazel
View
69
Download
3
Embed Size (px)
Citation preview
TDD Test Driven Development
Test'le Yürüyen/İlerleyen Geliştirme
???
TEST TÜRLERİ
• Verification & Validation • Quality Assurance • TDD
Verification & Validation / QA
KODU YAZ
TEST'i YAZ
TEST'i ÇALIŞTIR
REFACTOR
TDD
ÖNCE HAYAL ETTİĞİN UYGULAMAYI TANIMLA
BEKLENTİLERİNİ BELİRLE! TEST'LERİNİ ÇALIŞTIR
SONRA TEST'LERİ ÇALIŞTIR VE
HEPSİNİ BAŞARIYLA GEÇ!
EN SONDA YAZDIĞIN KOD'LARI
DÜZENLE!
RED (Kırmızı)1
TEST FAIL EDECEK!
Henüz ilgili fonksiyonlar/sınıflar yazılmadı!
GREEN (YEŞİL)2
TÜM TESTLER PASS ETTİ!
Şimdi sırada REFACTOR etmek var!
TEST YAZ / ÇALIŞTIR
FAIL EDENLERİ GÖR
KOD'U DÜZELT TEKRAR ÇALIŞTIR
REFACTOR
FAYDALARI• BUG FREE geliştirme • Hızlı geliştirme • Dökümantasyon yazma zahmetinden kurtarıyor • Sürdürülebilir kod yazma • Uçtan uca uygulamayı görmek • Deployment otomasyonunda kolaylık • Test Coverage
DEZAVANTAJLARI
• Legacy code'a entegre etmek sorun olabilir • Test'lerin maintenance işi ve test süresi • "Quick Edit" mini değişimler için zor • False Positives • Edge Case'leri mutlaka tamamlamak gerek
TEST YAZACAK ZAMANIM YOK
!
TEST YAZACAK ZAMANIM YOK
BUNU SÖYLEYEN CAHİLDİR!
require 'test/unit'
class TestPalindrome < Test::Unit::TestCase def test_palindrome palindromes = ["anastas mum satsana", "kuk"] not_palindromes = ["hello", "mello"] palindromes.each{|str| assert palindrome?(str)} not_palindromes.each{|str| assert !palindrome?(str)} end end
def palindrome?(string) string.reverse == string end
Loaded suite untitledStarted.
Finished in 0.001015 seconds.
1 tests, 4 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications100% passed
985.22 tests/s, 3940.89 assertions/s
Unit Tests
Uygulama içindeki en küçük parçaları fonksiyonları test ettiğimiz test. Hatta
buna Functionality Testing de denir.
Integration Tests
Kod içindeki farklı parçacıkların birbirleriyle olan entegrasyonlarını /
ilişkilerini test eden test.
Acceptance Tests
Baştan sona tüm fonksiyonalitenin, entegrasyonun test edildiği test. Bu
test'e END to END Testing de denir.
Sağlıklı Test Akışı
1. Unit Tests 2. Integration Tests 3. Acceptance Tests
TEST ARAÇLARI
rspec cucumber mini-test test-unit capybara selenium
Fixture ve Factory
Testleri yapabilmek için gerekebilecek fake datalar / dublörler
it "allows setting these responses" do fake_person = double("Person") allow(fake_person).to receive_messages(:full_name => "Uğur Özyılmazel") expect(fake_person.full_name).to eq("Uğur Özyılmazel") end
it "stubs desired year on a real Time object" do time = Time.new.now allow(time).to receive(:year).and_return(1972) expect(time.year).to eq(1975) end
factory_girl rspec-mocks mocha rr faker fabrication
TEST FIRST!Teşekkürler