通过具体类测试抽象类

唐·卡里斯托(DonCallisto)

一般来说,我对PHPSpec和BDD真的很陌生,所以,也许我的假设不好,在这种情况下,请纠正我。

让我们考虑这种情况

//src/myBundle/Model/FooInterface
interface FooInterface
{
    [...]
}

//src/myBundle/Model/FooAbstractManager
abstract class FooAbastractManager implements FooInterface
{
    public function aCommonMethodForAllConcrete()
    {
        [...]
    }
}

好的,假设aCommonMethodForAllConcrete()所有具体类都有一些实现,而我只想编写一次测试用例。

我终于有了(如果我错了,请纠正我)一个“想法”:创建一个FooAbstractManager仅用于测试该通用方法的具体方法,并将所有具体方法的测试留给具体的类。

但是,因为我不希望它FooAbstractManager成为我的src代码库的一部分,所以理想的情况是仅在spec文件夹的特定子目录中包含该类

问题:如何在不指定所有/src/myBundle/Model命名空间文件的情况下自定义该行为(例如,明天,我将需要在其中保留一个具体的类文件)?

缺氧

没错,您可以创建一个仅用于测试的具体类。它必须扩展抽象类,并为抽象类的抽象方法(如果有)提供虚拟实现。

因为为测试而创建的该类只是抽象类的一小部分,所以它本身不提供任何功能,并且仅用于单个中spec,甚至不需要将其放入自己的文件中。只需将其放在spec文件末尾即可。

这是测试抽象类的“官方”方式。选中“限制#5”在这篇文章由一个书面phpspec的创造者。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章