1
私は、仕様をClassA
に書き込むためにAAAパターンに従おうとしています。このクラスは、次のようにClassA
と相互作用するClassB
との依存関係を持っていますPHPSpecを使用したアレンジ/アクト/アサートパターン
class ClassA
{
private $objB;
public function __construct(ClassB $objB)
{
$this->objB = $objB;
}
public function doSomething($arg)
{
$val1 = $this->objB->someMethod($arg);
// do something with variable $val1
$this->objB->otherMethodCall();
}
}
とその仕様:私は、私はその方法を言ってエラーを得たこの仕様を実行するとClassB::otherMethodCall()
ことが期待されていません
class ClassASpec extends ObjectBehavior
{
function let(ClassB $objB)
{
$this->beConstructedWith($objB);
}
function it_should_do_something_cool(ClassB $objB)
{
// Arrange
$objB->someMethod(10)->willReturn(...);
// Act
$this->doSomething(10);
// Assert
$objB->otherMethodCall()->shouldHaveBeenCalled();
}
}
と呼ばれるだけClassB::someMethod()
が期待された。
ありがとう@DonCallistoをお読みください。私はあなたが示唆するようにコードを変更します。だから、モックのスパイを使っているときに元の順序でAAAを書くことはできないのですか?私がするべきことは、法の復帰を検証するために、アレンジ、アサート、アクト、アサートを書くことです。 –
@TalesSantos私はその特定の戦略を知らないが、注文が重要であると確信していますか?少なくともphpspecと私が知る限り、ダブルはスパイとモックが同時に(モック)またはメソッドの実行後に(スパイ)チェックされると同時に偽装することができないので、 – DonCallisto
技術的には問題はありませんが、アレンジ、演技、アサートが、仕様を整理した方が良いと思う。とにかく、あなたの答えは、モックとスパイの違いを理解する助けになりました。どうもありがとう。 –