首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是使用构造函数链接的好方法还是坏方法?以允许进行测试)

这是使用构造函数链接的好方法还是坏方法?以允许进行测试)
EN

Stack Overflow用户
提问于 2010-03-24 07:50:13
回答 2查看 454关注 0票数 6

我在这里链接类构造函数的动机是为了让我的应用程序有一个主流使用的默认构造函数,以及第二个允许我注入mock和stub的默认构造函数。

它只是在":this(...)“中看起来有点丑陋的”新“东西。从默认构造函数调用参数化构造函数,我想知道其他人会在这里做什么?

(仅供参考-> SystemWrapper)

代码语言:javascript
复制
using SystemWrapper;

public class MyDirectoryWorker{

    //  SystemWrapper interface allows for stub of sealed .Net class.
    private IDirectoryInfoWrap dirInf;

    private FileSystemWatcher watcher;

    public MyDirectoryWorker()
        : this(
        new DirectoryInfoWrap(new DirectoryInfo(MyDirPath)),
        new FileSystemWatcher()) { }


    public MyDirectoryWorker(IDirectoryInfoWrap dirInf, FileSystemWatcher watcher)
    {
        this.dirInf = dirInf;
        if(!dirInf.Exists){
            dirInf.Create();
        }

        this.watcher = watcher;

        watcher.Path = dirInf.FullName;

        watcher.NotifyFilter = NotifyFilters.FileName;
        watcher.Created += new FileSystemEventHandler(watcher_Created);
        watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
        watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
        watcher.EnableRaisingEvents = true;
    }

    public static string MyDirPath{get{return Settings.Default.MyDefaultDirPath;}}

    // etc...
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-24 08:21:00

包含默认构造函数是一种代码味道,因为现在该类被耦合到IDirectoryInfoWrap的具体实现。为了使您的工作更轻松,可以使用类外部的IOC容器来注入不同的依赖项,具体取决于您运行的是测试代码还是主流应用程序。

票数 3
EN

Stack Overflow用户

发布于 2010-03-24 07:55:14

我就是这么做的。

代码语言:javascript
复制
class MyUnitTestableClass
{
    public MyUnitTestableClass(IMockable foo)
    {
        // do stuff
    }

    public MyUnitTestableClass()
        : this(new DefaultImplementation())
    {
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2504466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档