如何重构静态构造函数以启用单元/验收测试

时间:2017-09-25 09:16:59

标签: c# .net refactoring

在我对服务的验收测试中,我按如下方式设置了测试人员:

var dataService = A.Fake<IDataService>();
this.domainRepository = A.Fake<IDomainRepository>();
var dbContextArticles = A.Fake<IDbContextArticles>();

this.testee = new DomainService(dataService, this.domainRepository, dbContedbContextArticles xtArtikel);

这个设置很遗憾,因为。

  1. DomainService类继承自BaseDataService
  2. BaseDataService有一个静态构造函数,如下所示:
    DbContext.LoadTranslations();
  3. DbContext.LoadTranslations();看起来像这样:
    using (DomainEntities entities = new DomainEntities(DbBase.ConnectionString)) { ... }
  4. 因此,当我创建DomainService的实例时,它失败了,因为我的验收测试中没有定义连接字符串,因为我不想使用真正的数据库。

    根据评论,翻译必须在静态构造函数中加载,否则在搜索文章时会加载8次...

    • 您是否有任何建议我如何重构这一点,以便验收测试使用虚假的上下文?

    我尝试引入ContextFactory但问题是,BaseDataService的静态构造函数调用静态方法DbContext.LoadTranslations(),因此我无法将IContextFactory注入{ {1}}因为甚至没有调用此构造函数...

    感谢您的任何建议。

0 个答案:

没有答案