使用Moq模拟Orchard动态类型

时间:2012-12-20 14:35:34

标签: dynamic moq orchardcms

我想知道是否有人有任何关于在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会返回此错误:

  

SetUp:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'Moq.Language.Flow.ISetup<Aqovia.Module.MotionGallery.Infrastructure.IClayWrapper,object>'不包含“Returns”的定义

基本上,它将Returns方法从Moq更改为动态调用,这是我在尝试包装之前遇到Clay主要问题之一。我也试过引进一个假造型工厂,结果相似。有没有人找到一种有效的方法来测试这些东西?除了不测试它?

1 个答案:

答案 0 :(得分:0)

重点是什么?模拟动态对象是荒谬的,因为你可以比模拟更容易地构建它们,这就是动态语言中通常没有模拟框架的原因:你不需要它们。只需使用真正的Clay对象。

您可能还想知道Clay不会随Orchard 1.7一起发货。