3

私は次のものを持っています

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 機能を指定したときに、プログラムが関数に入る理由と方法です。

4

1 に答える 1

6

モックしようとしているメソッドは、モック オブジェクトによって実装できる必要があります。つまり、具体的なクラスをモックしている場合は、仮想としてマークする必要があります。

詳細については、次の投稿をご覧ください: Rhino Mocks stubs and mocks are only good for interfaces?

于 2012-11-30T18:01:25.887 に答える