a1017819637 2017-02-04 09:02 采纳率: 0%
浏览 1974

Asp.net mvc 单元测试中调用控制器方法返回数据的Model属性

最近在自学asp.net mvc 参考的书籍是Adam Freeman的Pro Asp.Net Mvc5
其中在一个演示项目的单元测试中遇到了问题。代码如下:

using System;
using System.Linq;
using System.Collections;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using System.Web.Mvc;
using SportsStore.Domain.Abstract;
using SportsStore.Domain.Entities;
using SportsStore.WebUI.Controllers;
using System.Collections.Generic;

namespace SportsStore.UnitTests
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void Can_Pagenate()
        {
            //准备
            Mock<IProductRepository> mock = new Mock<IProductRepository>();
            mock.Setup(m=>m.Products).Returns(new Product[]{
            new Product{ProductID = 1,Name="P1"},
            new Product{ProductID = 2,Name="P2"},
            new Product{ProductID = 3,Name="P3"},
            new Product{ProductID = 4,Name="P4"},
            new Product{ProductID = 5,Name="P5"},
            });
            ProductController controller = new ProductController(mock.Object);
            controller.PageSize = 3;

            //动作
            IEnumerable<Product> result = (IEnumerable<Product>)controller.List(2).Model;

            //断言
            Product[] prodArray = result.ToArray();
            Assert.IsTrue(prodArray.Length == 2);
            Assert.AreEqual(prodArray[0].Name, "P4");
            Assert.AreEqual(prodArray[1].Name,"P5");

        }
    }
}

在以下代码初出现错误:
IEnumerable result = (IEnumerable)controller.List(2).Model;
提示:“System.Web.Mvc.ActionResult”不包含Model的定义,并且找不到可接受类型为"System.Web.Mvc.ActionResult"的第一个参数的扩展方法"Model"(是否缺少using指令或程序集引用?)
疑惑如下:
该单元测试的这里的思想是,将控制器方法返回的数据进行获取,在结果上调用Model属性。这里调用失败了。但是为什么失败呢
这里还有另一个错误 提示:程序集“SportsStore.WebUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”所使用的“System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”版本高于所引用的程序集“System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”的版本
是否与此相关,又该如何解决呢
另外还有几个错误如下:
错误 3 类型“System.Web.IHttpModule”在未被引用的程序集中定义。必须添加对程序集“System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。 G:\项目\SportsStore\SportsStore.UnitTests\App_Start\NinjectWebCommon.cs 23 13

错误 5 未能找到类型或命名空间名称“IHttpModule”(是否缺少 using 指令或程序集引用?) G:\项目\SportsStore\SportsStore.UnitTests\App_Start\NinjectWebCommon.cs 44 25

NinjectWebCommon.cs

 [assembly: WebActivator.PreApplicationStartMethod(typeof(SportsStore.UnitTests.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(SportsStore.UnitTests.App_Start.NinjectWebCommon), "Stop")]

namespace SportsStore.UnitTests.App_Start
{
    using System;
    using System.Web;

    using Microsoft.Web.Infrastructure.DynamicModuleHelper;

    using Ninject;
    using Ninject.Web.Common;

    public static class NinjectWebCommon 
    {
        private static readonly Bootstrapper bootstrapper = new Bootstrapper();

        /// <summary>
        /// Starts the application
        /// </summary>
        public static void Start() 
        {
            DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
            DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
            bootstrapper.Initialize(CreateKernel);
        }

        /// <summary>
        /// Stops the application.
        /// </summary>
        public static void Stop()
        {
            bootstrapper.ShutDown();
        }

        /// <summary>
        /// Creates the kernel that will manage your application.
        /// </summary>
        /// <returns>The created kernel.</returns>
        private static IKernel CreateKernel()
        {
            var kernel = new StandardKernel();
            kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
            kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

            RegisterServices(kernel);
            return kernel;
        }

        /// <summary>
        /// Load your modules or register your services here!
        /// </summary>
        /// <param name="kernel">The kernel.</param>
        private static void RegisterServices(IKernel kernel)
        {
        }        
    }
}

这里使用的软件是Visual Studio 2013

  • 写回答

2条回答 默认 最新

  • a1017819637 2017-02-04 09:07
    关注

    卡在这里一个下午了,想狗带

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料