c# - 为什么我在模拟测试对象上得到空引用异常?

标签 c# unit-testing mocking rhino-mocks nullreferenceexception

我有以下内容

IdleClass idleSend = MockRepository.GenerateMock<IdleClass >();
SpeedClass speedSend = MockRepository.GenerateMock<SpeeClass >();
idleSend.Expect(x => x.IsUnitInSystem(networkID)).Return(true).Repeat.Any();
speedSend.Expect(x => x.IsUnitInSystem(networkID)).Return(true).Repeat.Any();

原始的 IsUnitInSystem(networkID) 函数(在 IdleClass 和 SpeedClass 的子类中)如下:

public bool IsUnitInSystem(string networkID)
        {
            DateTime outVal = default(DateTime);
            return m_list1.DoesListContainUnit(networkID) ||
                   m_list2.TryGetValue(networkID, out outVal) ||
                   m_list3.TryGetValue(networkID, out outVal) ||
                   m_list4.TryGetValue(networkID, out outVal) ||
                   m_list5.TryGetValue(networkID, out outVal);
        }

我正在 IsUnitInSystem 函数的返回行上恢复 System.NullReferenceException。

堆栈跟踪:

IdleClass.IsUnitInSystem(String networkID)
PendingTest.<ResendClassTest>b__1b(IdleClass x)
RhinoMocksExtension.Expect[T,R](T mock, Function'2 action)
PendingTest.ResendClassTest()

我不明白的是,当我为函数指定了 .Expect 功能时,程序为什么以及如何进入函数?

最佳答案

您尝试模拟的方法必须能够由模拟对象实现,这意味着如果您模拟的是具体类,则必须将其标记为虚拟。

查看以下帖子了解更多信息:Rhino Mocks stubs and mocks are only good for interfaces?

关于c# - 为什么我在模拟测试对象上得到空引用异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13650151/

相关文章:

c# - Web API 第二次请求数据错误

c# - 如何在 C# 中将类实例传递给 WndProc

c# - 如何下载azure虚拟网络的客户端vpn exe文件

Python 3 : unittest. mock 如何为特定输入指定不同的返回值?

模拟消息队列

java - 用 jmockit 替换继承的 final方法

c# - 如何在 Web Api 中向一个客户端显示/隐藏少数方法以及向另一客户端显示/隐藏其他方法

c# - 如何在 ControllerContext 中模拟 DisplayMode 以进行单元测试 c#

python - 使用 patch decorator 和 side_effect 模拟文件读取

javascript - 测试一个函数在 promise 解析中被调用