挑战使代码可测试

本文关键字:测试 代码 挑战 | 更新日期: 2023-09-27 18:35:58

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

问候弗兰克

挑战使代码可测试

如果你只有一个类有外部依赖关系,你可能不想把它作为参数传递。更好的方法是在构造函数中传递它:

public class MyFirstClass : IMyInterface
{
    private IDirectoryEntry _entryAccessor;
    public MyFirstClass(IDirectoryEntry entryAccessor)
    {
         _entryAccessor = entryAccessor;
    }
    public List<string> GetGroups()
    {
        var directoryEntry = _entryAccessor.Do(path);
        return something;
    }
}