9

このコードを使用して、テストしているメソッドの動作を確認しています:

    _repository.Expect(f => f.FindAll(t => t.STATUS_CD == "A"))
    .Returns(new List<JSOFile>())
    .AtMostOnce()
    .Verifiable();

_repository は次のように定義されます。

private Mock<IRepository<JSOFile>> _repository;

テストを実行すると、次の例外が発生します。

式 t => (t.STATUS_CD = "A") はサポートされていません。

式を Expect メソッドに渡すことができない場合、この動作をテストする方法を教えてください。

ありがとう!!

4

5 に答える 5

2

これは少しずさんな方法です。式に対して .ToString() を実行し、それらを比較します。これは、テスト対象のクラスでラムダを同じ方法で記述する必要があることを意味します。必要に応じて、この時点で解析を行うことができます

    [Test]
    public void MoqTests()
    {
        var mockedRepo = new Mock<IRepository<Meeting>>();
        mockedRepo.Setup(r => r.FindWhere(MatchLambda<Meeting>(m => m.ID == 500))).Returns(new List<Meeting>());
        Assert.IsNull(mockedRepo.Object.FindWhere(m => m.ID == 400));
        Assert.AreEqual(0, mockedRepo.Object.FindWhere(m => m.ID == 500).Count);
    }

    //I broke this out into a helper as its a bit ugly
    Expression<Func<Meeting, bool>> MatchLambda<T>(Expression<Func<Meeting, bool>> exp)
    {
        return It.Is<Expression<Func<Meeting, bool>>>(e => e.ToString() == exp.ToString());
    }
于 2009-07-13T17:11:41.033 に答える
1

Moq ディスカッション リストを参照すると、答えが見つかったと思います。

Moq ディスカッション

Moq フレームワークの制限に遭遇したようです。

編集、式をテストする別の方法を見つけました:

http://blog.stevehorn.cc/2008/11/testing-expressions-with-moq.html

于 2008-11-14T13:48:20.963 に答える
0

これを試して

 _repository.Expect(f => f.FindAll(It.Is<SomeType>(t => t.STATUS_CD == "A")))

エラーをチェックする簡単な方法は、expect呼び出しの最後に、常に3つの')があることを確認することです。

于 2008-11-13T22:53:25.183 に答える
0

Rhino Mocks では、次のようなことを行います...

Expect を使用する代わりに、Stub を使用して引数を無視します。次に、持っています-

Func<JSOFile, bool> _myDelegate;

_repository.Stub(f => FindAll(null)).IgnoreArguments()
   .Do( (Func<Func<JSOFile, bool>, IEnumerable<JSOFile>>) (del => { _myDelegate = del; return new List<JSOFile>();});

実際のコードを呼び出す

* STATUS_CD を "A" に設定して偽の JSOFile オブジェクトをセットアップします *

Assert.IsTrue(_myDelegate.Invoke(fakeJSO));
于 2008-11-13T22:04:26.657 に答える
0

正しいパラメーターが渡されたことをテストしたい場合は、いつでも return ステートメントを「悪用」できます。

bool correctParamters = true;

_repository.Expect(f => f.FindAll(It.IsAny>()))

.Returns((Func func) => {correctParamters = func(fakeJSOFile); return new List-JSOFile-(); })

.AtMostOnce()

.Verifiable();

Assert.IsTrue(正しいパラメータ);

これにより、必要な引数で渡された関数が呼び出されます。

于 2008-11-14T05:08:56.660 に答える