我正在努力养成测试我的代码的好习惯,我在这个主题上做了一些练习,但一切都非常简单,以至于当我试图将我学到的知识应用到现实世界的应用程序时,我感到非常困惑。
我正在编写一个小的 PHP 框架,使用 Auryn、Zend-Diactoros 和 Fast-Route 等包。我想深入研究接口以便将来能够轻松交换依赖关系,所以我想编写一个具有 addRoute() 和 match() 方法的 RouterInterface,那么我只需要做的是为所选包编写适配器,使其适应我的界面。
我想使用 TDD 来开发这个框架,所以我开始测试我的 RouterAdapter 类,我完全迷失了。我可以测试一个简单的计算器类,但是如何测试一个严重依赖于一个我真的不知道它是如何工作的类的类?我知道我必须存储一个 RouteCollector 对象才能存储路由,我知道这个对象有一些方法,如 getData(),它返回一个数组数组,但我如何测试这样的方法:
public function addRoute($methods, string $pattern, $handler)
{
$this->routeCollector->addRoute($methods, $pattern, $handler);
}
类的构造函数可能是这样的
private $routeCollector;
public function __construct(RouteCollector $rc)
{
$this->routeCollector = $rc;
}
我的测试应该检查在 routeCollector 对象中添加了一个路由,但这需要对我的类中的私有属性运行检查。也许比我想象的要容易,但现在我真的没有有效的解决方案,除了编写实用程序方法来获取存储在对象中的数据,如下所示:
public function getRoutes()
{
/*
I want just the array in the first position because that array
is the array where are stored not-named routes.
*/
return $this->routeCollector->getData()[0];
}
也许是我想太多了,这种编码方式对我来说真的很新鲜