【问题标题】:Test abstract class through concrete class通过具体类测试抽象类
【发布时间】:2015-09-09 09:31:09
【问题描述】:

总的来说,我对 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 文件夹的特定子目录中。

问题:如何在不指定 ALL /src/myBundle/Model name-spaced files will be there 的情况下自定义该行为(因为,也许明天,我需要在那里保留一个具体的类文件)?

【问题讨论】:

    标签: testing bdd phpspec


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      你是对的,你可以创建一个具体的类来进行测试。它必须扩展抽象类并为抽象类的抽象方法(如果有)提供虚拟实现。

      因为为测试而创建的这个类只是抽象类的一个薄层,它本身不提供任何功能,并且只在单个spec 中使用,你甚至不需要将它放入它的自己的文件。只需将其放在spec 文件的末尾即可。

      这是一种测试抽象类的“官方”方式。在this article 上查看由phpspec 创作者之一撰写的“限制#5”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-12
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多