私が現在取り組んでいる .net 3.5 プロジェクトでは、サービス クラスのテストをいくつか書いていました。
public class ServiceClass : IServiceClass
{
private readonly IRepository _repository;
public ServiceClass(IRepository repository)
{
_repository = repository;
}
#region IServiceClass Members
public IEnumerable<ActionType> GetAvailableActions()
{
IQueryable<ActionType> actionTypeQuery = _repository.Query<ActionType>();
return actionTypeQuery.Where(x => x.Name == "debug").AsEnumerable();
}
#endregion
}
そして、私はスタブまたはモックの方法を理解するのに苦労していました
actionTypeQuery.Where(x => x.Name == "debug")
部。
これが私がこれまでに得たものです:
[TestFixture]
public class ServiceClassTester
{
private ServiceClass _service;
private IRepository _repository;
private IQueryable<ActionType> _actionQuery;
[SetUp]
public void SetUp()
{
_repository = MockRepository.GenerateMock<IRepository>();
_service = new ServiceClass(_repository);
}
[Test]
public void heres_a_test()
{
_actionQuery = MockRepository.GenerateStub<IQueryable<ActionType>>();
_repository.Expect(x => x.Query<ActionType>()).Return(_actionQuery);
_actionQuery.Expect(x => x.Where(y => y.Name == "debug")).Return(_actionQuery);
_service.GetAvailableActions();
_repository.VerifyAllExpectations();
_actionQuery.VerifyAllExpectations();
}
}
[注: 罪のない人を保護するためにクラス名が変更されています]
しかし、これはSystem.NullReferenceException
at で失敗します
_actionQuery.Expect(x => x.Where(y => y.Name == "debug")).Return(_actionQuery);
だから私の質問は:
RhinoMocks を使用して IQueryable.Where 関数をモックまたはスタブし、このテストに合格するにはどうすればよいですか?
現在のセットアップで IQueryable をモックまたはスタブ化できない場合は、理由を説明してください。
この壮大な長い質問を読んでくれてありがとう。