我有一些访问我们数据库的遗留代码。我想在单元测试中为IoC / DI创建一个这些类的接口。
这些类中的所有方法都是静态的。
当我尝试通过VisualStudio“提取界面”时,它失败并说:“无法提取界面:该类型不包含任何可以提取到界面的成员”。
有一些链接可以解释为什么接口不应该有静态方法here和here。
这个限制似乎主要是支持多态...我现在并不真正关心这些类并不真正从任何东西继承(除了Object)。
那么如何使用IoC来获取可以从中提取数据的对象?
我不想创建实例方法,因为实例会增加工作集。
答案 0 :(得分:3)
一种技术可能是用包装器抽象静态类。
public MyStaticWrapper : IMyStaticWrapper
{
public void SomeMethod(string something)
{
MyStatic.SomeMethod(something);
}
}
然后您可以在需要的地方注入IStaticWrapper
。
<小时/> 对不起 - 刚看到这一点....
我宁愿不制作实例方法,因为实例增加了 工作集。
我不确定它是否符合此要求,但改变的足迹是相对较小的IMO。就个人而言,我同意@DStanleys的评论。
答案 1 :(得分:1)
根据目标,您可以使用Microsoft Fakes之类的东西,特别是shims拦截静态调用,将遗留代码置于测试工具之下。
一旦您的磁带库满足测试,您可以将这些作为安全网,同时引入适当的DI,如果需要,可以删除静态和完全隔离的测试。
危险在于垫片是邪恶的,可以让开发人员摆脱不良行为。