gpt4 book ai didi

PHPUnit 依赖注入(inject)到测试用例中

转载 作者:可可西里 更新时间:2023-10-31 23:33:25 27 4
gpt4 key购买 nike

我想知道是否可以通过例如将依赖项注入(inject)从 PHPUnit_Framework_TestCase 派生的类中一些上下文测试套件 - 以 PHPUnit 可以处理的方式,而不管它是否已通过 phpunit.xml 配置文件或其他方式手动调用?

请考虑以下示例:

<?php
interface AnyGreeter {
public function greet($recipient);
}

class FriendlyGreeter implements AnyGreeter {
public function greet($recipient) {
return "Hello {$recipient}!";
}
}

class DorkGreeter implements AnyGreeter {
public function greet($recipient) {
return "Get lost, {$recipient}!";
}
}

现在我想为实现 AnyGreeter 的类提供一些通用测试,例如:

<?php
class GeeterTest extends PHPUnit_Framework_TestCase {

public function testGreet() {
$greeter = $this->getGreeter();
$message = $greeter->greet("world");
$this->assertContains("world", $message);
}

public function setGreeter(AnyGreeter $greeter) {
$this->greeter = $greeter;
}

public function getGreeter() {
if (null === $this->greeter) {
$this->markTestSkipped("No greeter provided");
}
return $this->greeter;
}

private $greeter;
}

这可能会被我自己以及任何 future 的实现(我无法控制)重新使用。

这怎么可能,尤其是在严重依赖接口(interface)的项目中?我不想编写抽象测试并为每个单独的实现扩展它们 --

谢谢!

最佳答案

我从未见过这样做,文档中也没有任何内容。测试似乎有点复杂。我会通过使用数据提供者将欢迎对象传递给 testGreeter 方法来解决您的问题,然后您所要做的就是在提供者中维护一组具体的欢迎者类。

请参阅此处的“数据提供者”部分:http://www.phpunit.de/manual/3.2/en/writing-tests-for-phpunit.html

关于PHPUnit 依赖注入(inject)到测试用例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10839744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com