【发布时间】: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 & avg) 对象创建模拟。现在,我如何模拟构造函数,对其进行测试并将构造函数中初始化的dat and avg 分配给我为单元测试创建的模拟对象(_dat & _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