如何测试ServiceStackController?

时间:2013-09-25 13:40:58

标签: c# asp.net-mvc mocking servicestack moq

我使用SupplierController课程及其SupplierControllerTest课程来验证我的期望。

如果我的SupplierController类继承自System.Web.Mvc.Controller,则测试运行正常。 如果我的SupplierController类继承自ServiceStack.Mvc.ServiceStackController,则测试会抛出异常。 我正在使用 Moq 来测试它。

以下是两个类:

测试类

  [TestFixture]
  public class SupplierControllerTests
  {
     [Test]
     public void Should_call_create_view_on_view_action()
     {
        var nafCodeServiceMock = new Mock<INafCodeService>();
        var countryServiceMock = new Mock<ICountryService>();
        var controller = new SupplierController();
        controller.NafCodeService = nafCodeServiceMock.Object;
        controller.CountryService = countryServiceMock.Object;

        nafCodeServiceMock.Setup(p => p.GetAll()).Returns(new List<NafCode> { new NafCode { Code = "8853Z", Description = "naf code test" } });
        countryServiceMock.Setup(p => p.GetAll()).Returns(new List<Country> { new Country { Name="France"  } });

        var result = controller.Create() as ViewResult;
        Assert.That(result, Is.Not.Null);
    }
 }

控制器类

  public class SupplierController : ServiceStackController
  {
     public ISupplierService SupplierService { get; set; }
     public IManagerService ManagerService { get; set; }
     public INafCodeService NafCodeService { get; set; }
     public ICountryService CountryService { get; set; }

     public ActionResult Create()
     {
       var model = new SupplierModel();
       model.Country = "France";
       return View(model);
     }
   }

SupplierModel类

  public class SupplierModel
  {
     public string Country { get; set; }
  }

抛出的错误是:

  

测试'SupplierControllerTests.Should_call_create_view_on_view_action'失败:System.MethodAccessException:Échecdela tentative d'accèsdelaméthode'SupplierController.Create()'àlaméthode'System.Web.Mvc.Controller.View(System.Object) ”。       Controllers \ SupplierController.cs(51,0):àSupplierController.Create()       Controllers \ SupplierControllerTests.cs(33,0):àSupplierControllerTests.Should_call_create_view_on_view_action()

翻译这意味着:

  

访问'SupplierController.Create()'方法失败。

1 个答案:

答案 0 :(得分:1)

我会抓紧抓住它。我不知道你正在使用什么版本的MVC,但我的猜测是ServiceStack是针对旧版本编译的。您将需要绑定重定向。现在通常,绑定重定向作为MVC项目模板的一部分添加,但在单元测试项目中,您必须手动执行(这解释了为什么您只在单元测试中遇到此错误)。

在您的单元测试项目app.config中(此示例是从MVC2重定向到MVC3。根据您的情况调整它):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>