gpt4 book ai didi

unit-testing - 测试抽象类

转载 作者:行者123 更新时间:2023-12-03 04:26:33 25 4
gpt4 key购买 nike

如何使用 PHPUnit 测试抽象类的具体方法?

我希望我必须创建某种对象作为测试的一部分。不过,我不知道最佳实践或 PHPUnit 是否允许这样做。

最佳答案

抽象类的单元测试并不一定意味着测试接口(interface),因为抽象类可以有具体的方法,并且可以测试这个具体的方法。

在编写一些库代码时,您希望在应用程序层中扩展某些基类,这种情况并不罕见。如果您想确保库代码经过测试,您需要有方法来 UT 抽象类的具体方法。

就我个人而言,我使用 PHPUnit,它有所谓的 stub 和模拟对象来帮助您测试此类内容。

直接来自PHPUnit manual :

abstract class AbstractClass
{
public function concreteMethod()
{
return $this->abstractMethod();
}

public abstract function abstractMethod();
}

class AbstractClassTest extends PHPUnit_Framework_TestCase
{
public function testConcreteMethod()
{
$stub = $this->getMockForAbstractClass('AbstractClass');
$stub->expects($this->any())
->method('abstractMethod')
->will($this->returnValue(TRUE));

$this->assertTrue($stub->concreteMethod());
}
}

模拟对象可以给你带来一些好处:

  • 您不需要具体实现抽象类,并且可以使用 stub 来代替
  • 您可以调用具体方法并断言它们正确执行
  • 如果具体方法依赖于未实现的(抽象)方法,您可以使用 will() PHPUnit 方法对返回值进行 stub

关于unit-testing - 测试抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/190295/

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