Bu test ilk odaklı yaklaşımı bir çözüme varmak nasıl yardımcı mükemmel bir örnektir. O çok iyi biri olmayabilir, ancak yazılı olan testler güvenle Refactor ve anında mevcut testlerin herhangi kırmak görmek için izin verir. Neyse, sizin gibi birkaç testleri kurmak olabilir:
public function setUp () {
$this->searchParser = new App_Search_Parser();
}
public function testSingleWordParsesToAllWords () {
$this->searchParser->parse('Transport');
$this->assertEquals(
$this->searchParser->getAllWords(),
array('Transport')
);
$this->assertEquals($this->searchParser->getNotWords(), array());
$this->assertEquals($this->searchParser->getAnyWords());
}
public function testParseOfCombinedSearchString () {
$query = 'energy food "olympics 2010" Terrorism ' .
'OR "government" OR cups NOT transport';
$this->searchParser->parse($query);
$this->assertEquals(
$this->searchParser->getAllWords(),
array('energy', 'food', 'olympics 2010')
);
$this->assertEquals(
$this->searchParser->getNotWords(),
array('Transport')
);
$this->assertEquals(
$this->searchParser->getAnyWords(),
array( 'terrorism', 'government', 'cups')
);
}
Diğer iyi testler şunlardır:
testParseTwoWords
testParseTwoWordsWithOr
testParseSimpleWithNot
testParseInvalid
- Burada geçersiz giriş neye benzediğini ve bunu nasıl yorumlamak, yani karar vermek zorunda:
- 'Taşıma DEĞİL': Transport içeren ya da o da en az bir arama terimini vardır kullanıcıyı bilgilendirmek değil bir şey için ara?
- 'OR enerji': Bir combinator başlamak için Tamam mı?
- 'Gıda OLMASIN enerji': Bu demek "yiyecek ya da enerjiyi içermiyor şey aramak", ya da "gıda ve enerji değil, araştırın" demek, ya da hiçbir şey demek değil mi? (Yani atış istisna, return false ya da etajer)
testParseEmpty
Then, write the tests one by one, and write a simple solution that passes the test. Then refactor and make it right, and run again to see that you still pass the test.
Once a test passes and the code is refactored, then write the next test and repeat the procedure. Add more tests as you find special cases and refactor the code so that it passes all tests. If you break a test, back-up and re-write the code (not the test!) such that it passes.
Eğer bu sorunu çözebilir nasıl gelince, preg_match, strtok içine bakmak ya da gitmek gibi belirteçleri kadar ekleyerek dize yoluyla sadece döngü güveniyor.