挑战使代码可测试

时间:2016-02-24 13:14:14

标签: c# unit-testing refactoring

我正在重构遗留代码以使其(单元)可测试。我有两个实现相同接口的类,如下所示。在其中一个类中,我对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;
    }
}

此致 弗兰克

1 个答案:

答案 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;
    }
}