5

私のコントローラーでは、コントローラーがリポジトリメソッドを呼び出しているかどうかをテストしたいと考えています。これがコントローラーのメソッドです

[HttpGet]
public ActionResult GetModulePropertyName(string moduleTypeValue)
{
  var temp = _modulerepository.GetModuleKindPropertyNames(moduleTypeValue);

  IList<Property> model = temp
     .Select(item => new Property {Name = item})
     .ToList();

  return PartialView("GetModulePropertyName",model);
}

そして、ここにテスト方法があります

[TestMethod]
public void GetModulePropertyName_Action_Calls_GetModuleKindPropertyNames()
{
  _mockRepository.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything));

  _controller.GetModulePropertyName(Arg<string>.Is.Anything);

  _mockRepository.AssertWasCalled(x=>x.GetModuleKindPropertyNames(Arg<string>.Is.Anything));
}

というエラーがスローされます

Test method AdminPortal.Tests.ModuleControllerTests.GetModulePropertyName_Action_Calls_GetModuleKindPropertyNames threw exception: 
System.NullReferenceException: Object reference not set to an instance of an object.
    at System.Linq.Queryable.Select(IQueryable`1 source, Expression`1 selector)
   at AdminPortal.Areas.Hardware.Controllers.ModuleController.GetModulePropertyName(String moduleTypeValue) in ModuleController.cs: line 83
   at AdminPortal.Tests.ModuleControllerTests.GetModulePropertyName_Action_Calls_GetModuleKindPropertyNames() in ModuleControllerTests.cs: line 213

RhinoMockをモッキング ツールとして使用しています。誰かが私が犯している間違いを助けることができますか?

4

2 に答える 2

5

メソッドをスタブ化した後、Return何を返す必要があるかを示すために使用します。次に例を示します。

_mockRepository
  .Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything))
  .Return(Enumerable.Empty<string>().AsQueryable());

また、次の行を変更します。

_controller.GetModulePropertyName(Arg<string>.Is.Anything);

これに:

_controller.GetModulePropertyName(string.Empty);

例外が説明しているように、 -Argはモック定義でのみ使用されます。

于 2013-08-16T12:53:57.790 に答える
2

スタブにはリターンがありません。

_mockRepository.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything));

そのリターンがなければ、この行は null 参照に対してラムダを実行します

 IList<Property> model = temp.Select(item => new Property {Name = item}).ToList();

それで:

    _mockRepository.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything)).Return(new Module[]{}); // set some return data here
于 2013-08-16T12:54:19.747 に答える