我正在重构遗留代码以使其(单元)可测试。我有两个实现相同接口的类,如下所示。在其中一个类中,我对DirectoryEntry具有外部依赖性。我建议的处理方法是创建一个IDirectoryEntry接口,并将目录条目作为参数传递给GetGroups方法。问题是这会破坏IMyInterface。
重构此代码的更好方法是什么?
public interface IMyInterface
{
List<string> GetGroups();
}
public class MyFirstClass : IMyInterface
{
public List<string> GetGroups()
{
..
var directoryEntry = new DirectoryEntry(path);
..
return something;
}
}
public class MySecondClass : IMyInterface
{
public List<string> GetGroups()
{
return somethingElse;
}
}
此致 弗兰克
答案 0 :(得分:2)
如果您只在一个班级中有外部依赖,那么您可能不希望将其作为参数传递。 更好的方法是在构造函数中传递它:
public class MyFirstClass : IMyInterface
{
private IDirectoryEntry _entryAccessor;
public MyFirstClass(IDirectoryEntry entryAccessor)
{
_entryAccessor = entryAccessor;
}
public List<string> GetGroups()
{
var directoryEntry = _entryAccessor.Do(path);
return something;
}
}