如何让 phpspec 评估我的构造函数
How to make phpspec evaluate my constructor
public function __construct(RequestSchemaInterface $requestSchema)
{
$this->schema = $requestSchema->getSchema();
}
当我 运行 构建器的 phpspec 时,$this->schema 总是空的。
在正常调用中,它设置架构。
我得到实施
function let(RequestSchema $requestSchema)
{
$this->beConstructedWith($requestSchema);
}
如果 class 使用 $this->schema,我该如何测试它们?
您的 let()
方法使用存根来构建被测 object。虽然这是推荐的,但不是必需的。您可以创建一个 RequestSchema
类型的真实 object 并使用它来构建测试 class:
function let()
{
$requestSchema = new RequestSchema();
$this->beConstructedWith($requestSchema);
}
更新:
关于你的问题的标题"How to make phpspec evaluate my constructor":构造函数被执行但是,因为你为$requestSchema
使用了存根,调用$requestSchema->getSchema()
在构造函数中 returns NULL
.
当它的方法 getSchema()
被调用时,你可以 prepare the stub 到 return 其他东西。
试试这个:
function let(RequestSchema $requestSchema)
{
// Prepare the stub
$requestSchema->getSchema()->willReturn('something');
// Construct the object under test using the prepare stub
$this->beConstructedWith($requestSchema);
// Verify the constructor initialized the object properties
$this->schema->shouldBe('something');
}
public function __construct(RequestSchemaInterface $requestSchema)
{
$this->schema = $requestSchema->getSchema();
}
当我 运行 构建器的 phpspec 时,$this->schema 总是空的。 在正常调用中,它设置架构。 我得到实施
function let(RequestSchema $requestSchema)
{
$this->beConstructedWith($requestSchema);
}
如果 class 使用 $this->schema,我该如何测试它们?
您的 let()
方法使用存根来构建被测 object。虽然这是推荐的,但不是必需的。您可以创建一个 RequestSchema
类型的真实 object 并使用它来构建测试 class:
function let()
{
$requestSchema = new RequestSchema();
$this->beConstructedWith($requestSchema);
}
更新:
关于你的问题的标题"How to make phpspec evaluate my constructor":构造函数被执行但是,因为你为$requestSchema
使用了存根,调用$requestSchema->getSchema()
在构造函数中 returns NULL
.
当它的方法 getSchema()
被调用时,你可以 prepare the stub 到 return 其他东西。
试试这个:
function let(RequestSchema $requestSchema)
{
// Prepare the stub
$requestSchema->getSchema()->willReturn('something');
// Construct the object under test using the prepare stub
$this->beConstructedWith($requestSchema);
// Verify the constructor initialized the object properties
$this->schema->shouldBe('something');
}