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 : Échec de latempative d'accès de la method 'SupplierController.Create()' à la method '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()' へのアクセスに失敗しました。