0
我有一系列的規格正在做我希望他們做的事情,但我想知道我是否過於複雜,因爲我的let函數對於其中的一些而言是相當龐大和繁瑣的。PHPSpec:如何處理規範中的數據嘲諷?
我已經構建了一系列處理來自SQL或JSON API的響應的類的規範,具體取決於響應。規範只是檢查每個類的過程的結果對象。我已經嘲笑了連接,以便爲規範會觸發的每種請求返回有效的模擬數據。我試圖想出一個更好的方式來提供這個模擬數據,而不是隻有坐在spec文件中的相當大的數組和JSON字符串。
例如(簡體):
class CharacterProcessorSpec extends ObjectBehavior
{
public function let(AdapterInterface $adapter)
{
$characters = [
[
'name' => 'Timmy',
'class' => 'Fighter',
'level' => 1,
'race' => 'Elf',
'str' => 16,
'dex' => 14,
'con' => 18,
'int' => 10,
'wis' => 12,
'cha' => 11,
... // Rest of the minimally required fields
], [
... // Second character for processing multiple at once
]
];
$adapter->fetch(new CharacterRequest('Timmy'))->willReturn([$characters[0]]);
$adapter->fetch(new CharacterRequest('*'))->willReturn($characters);
$this->beConstructedWith($adapter);
}
public function it_should_build_requested_character_details()
{
$this->build('Timmy')->shouldReturnArrayOfCharacters();
}
public function it_should_build_all_character_details()
{
$this->buildAll()->shouldReturnArrayOfCharacters();
}
public function getMatchers()
{
return [
'returnArrayOfCharacters' => function($characters) {
foreach ($characters as $c) {
if (!$c instanceof Character) {
return false;
}
}
return true;
}
];
}
}
是否值得我在移動陣列到一個單獨的文件,並加載它們或者是一種沒有沒有?
注意:構建函數被設計爲不關心適配器是用於SQL還是API,它只是將數據轉換爲一致的對象。因此規範並沒有真正定義數據是什麼(在我提供的例子中,它與SQL響應相同,但我通常將第二個條目格式化爲JSON響應如何按每個條目進行處理)。
安排測試的一部分(獨立於您使用的庫)可能有時很麻煩。如果你需要「夾具」陣列中的所有字符,恐怕這是你測試的「最小設置」,所以你不能採取不同的行動。一種解決方案是將該陣列減少到最小「重要」數據集並移動。我不是100%肯定這個評論是否可以,但以我的經驗,我總是這樣做。 – DonCallisto