2

Orchard の Clay 機能の一部を効果的にモックする方法について、誰かアドバイスがあれば教えてください。IClayWrapperより複雑な動的呼び出しの一部をラップするラッパー インターフェイス を作成するところまで行きました。残念ながら、これらのラッパー メソッドは動的オブジェクトを返す必要があるため、まだ問題があります。以下に小さな例を示します。

public interface IClayWrapper : IDependency
{
    dynamic BuildClipCreateViewModel(string projectTitle, string moduleTitle, dynamic clipForm);
}

public class WhenViewingCreateClip : GivenAClipController
{
    private IEnumerable<ContentItem> queryResults;

    protected override ClipController Establish_context()
    {
        var queryResults = new List<ContentItem>
        {
            new ContentItem(),
            new ContentItem(),
        };
        ClayWrapperMock.Setup(x => x.BuildLookupListFromQuery(queryResults, "Create")).Returns(It.IsAny<dynamic>());
    }
}

私が現在直面している問題は、Moq が次のエラーを返すことです。

セットアップ: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ' ' には ' 'Moq.Language.Flow.ISetup<Aqovia.Module.MotionGallery.Infrastructure.IClayWrapper,object>の定義が含まれていませんReturns

基本的に、Returnsメソッドを Moq から動的呼び出しに変更しました。これは、ラップを試みる前に Clay で直面していた主な問題の 1 つです。同様の結果が得られる偽のシェイプ ファクトリも導入してみました。このようなものをテストする効果的な方法を見つけた人はいますか? テストしない以外は?

4

1 に答える 1

0

ポイントは何ですか?モックよりもはるかに簡単に構築できるため、動的オブジェクトをモックすることはばかげています。これが、通常、動的言語にモック フレームワークがない理由です。それらは必要ありません。実際の Clay オブジェクトを使用するだけです。

Clay は Orchard 1.7 には同梱されないことも知っておく必要があります。

于 2012-12-20T17:13:51.783 に答える