【问题标题】:Mock C# Constructor using NUnit使用 NUnit 模拟 C# 构造函数
【发布时间】:2016-10-12 16:09:42
【问题描述】:

我有以下要模拟的 C# 构造函数(使用 NUnit+RhinoMocks):

public SMin(Dictionary<string, string> conf) : base(conf)
    {
        dat = Mgmt.Getbit<bool>(conf["D_BIT"]);
        avg = Mgmt.Getbit<bool>(conf["A_BIT"]);
    }

我尝试了以下方法:

我正在为 Mgmt 类、SMin 和在构造函数中初始化的变量 (dat &amp; avg) 对象创建模拟。现在,我如何模拟构造函数,对其进行测试并将构造函数中初始化的dat and avg 分配给我为单元测试创​​建的模拟对象(_dat &amp; _avg)。

[TestFixture()]  
class SMinUTest
{

    [TestFixtureSetUp]
    public void Setup()
    {
       var _mockMgmt = MockRepository.GenerateMock<Mgmt>();
       var _smin = MockRepository.GenerateStrictMock<SMin>(null);
       var _dat = MockRepository.GenerateMock<IF_IO<bool>>();
       var _avg = MockRepository.GenerateMock<IF_IO<bool>>();
    }
...
...
}

【问题讨论】:

  • Mgmt 是在被测类中使用的静态类或实例吗?如果SMin 是被测类,那么你不要模拟它,因为你没有模拟被测类。你嘲笑它的依赖关系。
  • 您必须提供被测类的minimal reproducible example 和预期行为。
  • @Nkosi 是的。 SMin 是被测试的类。 Mgmt 是一个使用的实例。 SMin 仅具有 dat & avg 使用的读写功能。在这种情况下如何模拟构造函数?
  • 您不模拟构造函数,而是模拟传递给构造函数的内容。
  • Mgmt 是否访问任何在单元测试期间不起作用的外部资源?

标签: c# unit-testing mocking nunit rhino-mocks


【解决方案1】:

您需要通过构造函数将 Mgmt 的实例传递给 SMin。忽略基类,SMin 看起来像这样:

class SMin
{
  // Just guessing at what type Mgmt is.. replace with your actual class name
  Management mgmt; // Instance passed in via constructor

  public SMin(Dictionary<string, string> conf, Management mgmt)
  {
    this.mgmt = mgmt;
    dat = mgmt.Getbit<bool>(conf["D_BIT"]);
    avg = mgmt.Getbit<bool>(conf["A_BIT"]);
  }
  // Other code
}

测试可能看起来像这样:

[Test]
public void MyTest()
{
  var conf = new Dictionary<string, string>();
  var _mockMgmt = MockRepository.GenerateMock<Management>();

  // TODO - Set expectations on _mockMgmt here, since the SMin constructor uses it

  // Create instance of SMin, passing in our mock
  var smin = new SMin(conf, _mockMgmt);

  // TODO - More test code, followed by assertions
}

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 2013-01-12
    • 2015-12-09
    • 1970-01-01
    • 2019-11-24
    • 2013-09-03
    • 2015-08-15
    • 2020-01-08
    相关资源
    最近更新 更多