Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用多个接口模拟受保护的成员_C#_Asp.net Mvc_Unit Testing_Moq - Fatal编程技术网

C# 如何使用多个接口模拟受保护的成员

C# 如何使用多个接口模拟受保护的成员,c#,asp.net-mvc,unit-testing,moq,C#,Asp.net Mvc,Unit Testing,Moq,如何在nUnit测试中模拟这个类 public class OpenDataQuery: PagedQuery, IOpenDataQuery { private static Dictionary<string, SortItem> m_sortModes; protected override Dictionary<string, SortItem> SortModes { get

如何在nUnit测试中模拟这个类

public class OpenDataQuery: PagedQuery, IOpenDataQuery
    {
        private static Dictionary<string, SortItem> m_sortModes;

        protected override Dictionary<string, SortItem> SortModes
        {
            get
            {
                if (m_sortModes == null)
                {
                    m_sortModes = new Dictionary<string, SortItem>();

                    AddSortMode(m_sortModes, new SortItem(ObjectExtensions.GetNameFromExpression<OpenDataCategoriesModel, string>(m => m.Name), "Наименование ↑", true) { IsDefault = true });
                    AddSortMode(m_sortModes, new SortItem(ObjectExtensions.GetNameFromExpression<OpenDataCategoriesModel, string>(m => m.Name), "Наименование ↓"));
                }

                return m_sortModes;
            }
        }

        public IEnumerable<OpenDataCategoriesModel> OpenDataCategories { get; set; }

        public string OpenDataTags { get; set; }
    }
我有一些服务方法,在参数中使用openDataQuery类,在单元测试中我尝试模拟这个类,但这不起作用:

    public partial class OpenDataQueryRepository : Mock<OpenDataQuery>
        {
            public OpenDataQueryRepository(MockBehavior mockBehavior = MockBehavior.Strict)
                : base(mockBehavior)
            {
                          var opendataQuery = new Mock<IOpenDataQuery>();

                          var pagedQuery = opendataQuery.As<IPagedQuery>();

                          this.Setup(p=>p.GetOpenDataCategoriesMain(pagedQuery.Object,outttl)).Returns(OpenDataCategories);


            }
        }
测试:


在你的测试中,这个是什么?您正在测试的是使用
IPagedQuery
的类?为什么需要它?毕竟,你用Moq来模拟接口,而不是类。@SergeyBerezovskiy我编辑了这篇文章,以理解
的意思,并添加了测试代码controller@RoyDictus或抽象类;)
public interface IOpenDataQuery : IPagedQuery
    {
        string OpenDataTags { get; set; }

    }
    public partial class OpenDataQueryRepository : Mock<OpenDataQuery>
        {
            public OpenDataQueryRepository(MockBehavior mockBehavior = MockBehavior.Strict)
                : base(mockBehavior)
            {
                          var opendataQuery = new Mock<IOpenDataQuery>();

                          var pagedQuery = opendataQuery.As<IPagedQuery>();

                          this.Setup(p=>p.GetOpenDataCategoriesMain(pagedQuery.Object,outttl)).Returns(OpenDataCategories);


            }
        }
public class ODOpenDataController : ODBaseController
{
        private readonly IOpenDataProvider m_openDataProvider;

        public ODOpenDataController(IOpenDataProvider openDataProvider)
        {
            m_openDataProvider = openDataProvider; 
        }    

        public ActionResult Index(OpenDataQuery query)
        {
            int total;    

            query.OpenDataCategories = m_openDataProvider.GetOpenDataCategoriesMain(query, out total)

            query.Total = total;
            return View(query);
        }

}
[Test]
public void Index_Test()
{
    var opendataController = new ODOpenDataController(new OpenDataRepository().Object);

    var result = opendataController.Index(new OpenDataQuery()) as ViewResult;
    var model = result.Model as OpenDataQuery;

    Assert.IsTrue(model.OpenDataCategories.Count() == 1);
}