为什么我在模拟测试对象上获得空引用异常?

时间:2012-11-30 17:29:39

标签: 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功能时程序如何进入该功能?

1 个答案:

答案 0 :(得分:5)

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

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