【问题标题】:FakeItEasy fake instansiation of a Poco classPoco 类的 FakeItEasy 假实例化
【发布时间】:2018-03-01 13:07:15
【问题描述】:

我有一堂课:

public class WeekCompareModel 
{
   public WeekData Week1 {get; set;}
   public WeekData Week1 {get; set;}  
}

这个对象是这样创建的:

var model = new WeekCompareModel
{
   Week1 = Repo.FirstOrDefault(x => x.Typ == (int)type && x.Week == week1),
   Week2 = Repo.FirstOrDefault(x => x.Typ == (int)type && x.Week == week2),
};

在我的代码中,这是在实现基类的管理器类中实例化的:

public class SystemStatisticsManager : CrudManagerBase<Systemstatistik>, ISystemStatisticsManager
{
    public SystemStatisticsManager()
    {
        Repo = CoreRepository.Systemstatistiks;
    }
...
}

我的 crudmanagerbase 类:

public class CrudManagerBase<T> : ICrudManagerBase<T>
    where T : class
{
    protected readonly ICachedCoreRepository CoreRepository;
    protected IQueryable<T> Repo;
 ...
 }

我想在我的单元测试中做的是覆盖调用

 new WeekCompareModel { ... }

并将其替换为该模型的测试实例。

知道 FakeItEasy 或任何其他 Mock 库是否可以做到这一点?

【问题讨论】:

  • 我建议将创建委托给另一个可以被模拟/存根/伪造的方法。
  • 我希望我不需要这样做。这是一个需要大量重写的旧应用程序。
  • 是的,试图在糟糕的设计中创造奇迹,事实上是非常困难的。
  • 是的,获得预算来解决问题可能很麻烦 :)

标签: c# .net unit-testing fakeiteasy


【解决方案1】:

正如@Nikosi 的评论中所指出的,如果不将创建委托给另一个方法,FakeItEasy 将无法做到这一点。

但您也询问了其他库。我过去使用过 Typemock Isolator,它有这个功能。该功能称为Faking Future Instances,可以像这样使用

var handle = Isolate.Fake.NextInstance<Dependency>();

// Do something with the system under test

缺点是 Isolator 是一种商业产品,并且在我输入时,costs about $399 US/year

哦。我刚刚注意到 JustMock 也有 Future Mocking。我无法从文档中看出,但假设它也只在其paid version 中提供了该功能。

【讨论】:

  • 谢谢,我去看看。
猜你喜欢
  • 1970-01-01
  • 2011-12-09
  • 2017-12-25
  • 2020-03-29
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多