关于单元测试,我被告知生产代码中不应包含与测试相关的代码。
好吧,每次我尝试进行单元测试时,我都觉得自己违反了这条规则。
我的程序集内部有一个类,Xyzzy
. 我想将它依赖注入另一个类,然后存根它,这样我就可以单独测试另一个类,所以我创建了一个接口,IXyzzy
. 哎呀,现在我的生产中的代码实际上只用于测试。更糟糕的是,我有点反对接口是什么(描述实现者可以做什么,而不是它是什么)。Xyzzy 的公共接口和 IXyzzy 完全一样,没有其他人(除了存根)实现 IXyzzy。
这对我来说似乎是一件坏事。
我可以创建一个抽象基类或创建我想在 Xyzzy Overridable
/上测试的所有公共方法virtual
,但这也感觉不对,因为 Xyzzy 不是为继承而设计的,并且从 YAGNI 的角度来看,它永远不会被继承。
创建单实现者接口仅仅是为了测试反模式吗?有更好的选择吗?