我对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的情况下自定义该行为(可能明天,我需要在那里保留具体的类文件)?
答案 0 :(得分:3)
看看这个例子,它可以满足您的需求:https://github.com/Sylius/Translation/blob/master/spec/Model/AbstractTranslatableSpec.php
答案 1 :(得分:2)
你是对的,你可以创建一个专门用于测试的类。它必须扩展抽象类并为抽象类的抽象方法(如果有的话)提供虚拟实现。
因为为测试而创建的这个类只是抽象类的一个很薄的封面,所以它本身并不提供任何功能,而且它只在一个spec
中使用,而不是#&# 39;甚至需要把它放到自己的文件中。只需将其放在spec
文件的末尾即可。
这是"官员"测试抽象类的方法。检查"限制#5" this article由其中一位phpspec
创作者撰写。