所以,我一直在阅读有效地使用旧代码。它很棒,涵盖了许多很酷的技术,这些技术也可以“安全”地用于未经测试的代码。
我最喜欢的部分之一是建议在存在麻烦的依赖项时扩展您打算测试的类。例如
class FooBar
{
public List<Foo> ReadFoos()
{
var s=new SqlConnection(Config.SomeConntectionStirng);
s.Read("Foo")....
}
}
被重构为
class FooBar
{
public List<Foo> ReadFoos()
{
var s=MyConnection();
s.Read("Foo")....
}
protected virtual IConnection MyConnection()
{
return new SqlConnection(Config.SomeConnectionString);
}
}
然后为了测试它,你会像这样继承它:
class TestableFooBar : FooBar
{
protected override IConnection MyConnection()
{
return new MockConnection();
}
}
并在扩展类上进行测试。
现在,我的问题。可以这样做并且以后不重构吗?我这么说的主要原因是因为这对于一些通常难以单元测试而不会使调用 API 更难使用的代码很有用。在公共 API 上,您肯定希望它尽可能简单。那么,按设计保留这样的事情是否可行?