0

RhinoMocks でこのコードがまだネイティブを実行する理由を誰か説明してもらえますSomeVirtualMethodか?

var repository = MockRepository.GenerateStub<MyRepository>(null, null);
repository.Stub(x => x.SomeVirtualMethod()).Return(new List<SomeObject>());

2 行目が実行されると、元の行が実行SomeVirtualMethodされてクラッシュします。これは、コンテキストから外れているためです。私も試しました:

var repository = MockRepository.GenerateStub<MyRepository>(null, null);
repository.Stub(x => x.SomeVirtualMethod()).Do(new Func<List<SomeObject>>(() => new List<SomeObject>()));

代替メソッドのみが呼び出されるようにするにはどうすればよいですか?

4

1 に答える 1

0

私はあなたのスニペットを試しましたが、予想される空のコレクションを返すのに問題なく動作します。SomeVirtualMethodあなたがまだ実行されている理由を想像できる唯一の理由は、実際には仮想ではないからです! もう一度確認してください。

これは私が試したコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Rhino.Mocks;

namespace TestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            var stub = MockRepository.GenerateStub<MyRepository>(null,null);
            stub.Stub(x => x.SomeVirtualMethod()).Return(new List<SomeObject>());
            Assert.AreEqual(0, stub.SomeVirtualMethod().Count());
        }
    }

    public class MyRepository {

        public MyRepository(object a1, object a2) { }
        public virtual IEnumerable<SomeObject> SomeVirtualMethod()
        {
            throw new NotImplementedException();
        }
    }

    public class SomeObject {}
}
于 2012-06-21T15:43:04.030 に答える