NHibernate、ASP.NET MVC 2.0、StructureMapで新しいプロジェクトを開始し、テストにNUnitとMoqを使用しています。私のコントローラのそれぞれに対して、私は、単一のpublicコンストラクタを持ち、そこには、セッションが注入されています。アプリケーション自体はうまく動作しますが、単体テストの観点からは、コントローラをテストするためには基本的にセッションをモックする必要があります。MoqでNHibernateのセッションをモック
私はMOQでISessionをモックしようとすると、私は次のエラーメッセージを取得:
のみプロパティアクセスは、中間の呼び出しで
をサポートしている私の問題は、一覧を期待していることが表示されますフレームワークのCreateQueryメソッドからのユーザーが、私は今明確になっている問題をグーグルで調べています。
は、私は2つの質問があります:それは成功した私のリストを返すことができるようにコードを変更する方法を
1)これはISession
2)の依存性注入を模擬するために間違った方法ですがあります
[Test]
public void DummyTest()
{
var mock = new Mock<ISession>();
var loc = new Mock<User>();
loc.SetupGet(x => x.ID).Returns(2);
loc.SetupGet(x => x.FirstName).Returns("John");
loc.SetupGet(x => x.LastName).Returns("Peterson");
var lst = new List<User> {loc.Object};
mock.Setup(framework => framework.CreateQuery("from User").List<User>()).Returns(lst);
var controller = new UsersController(mock.Object);
var result = controller.Index() as ViewResult;
Assert.IsNotNull(result.ViewData);
}
は私がちょうど(個々のユーザーをからかうと、リストに追加するのではなく)、ユーザーのハードコーディングされたリストを作成することができますかなり確信している、注意してくださいしかし、私はそれを持っているように、私は、コードを残したい考え出してください。たった今。
また、この特定のコントローラーのインデックスアクションは、基本的に上記のような模倣されたCreateQuery呼び出しを実行して、データベース内のすべてのユーザーを戻します。これは人為的な例です。詳細に何も読み込まないでください。あなたの助けを事前に
おかげ
編集:以下のコメントへの返信では、私はエラーのスタックトレースを追加しています。また、Userクラスのすべてのプロパティは仮想です。
のTestCase 'Beta.Tests.Unit.Controllers.UserControllerTest.Details_InValidIndex_ReturnsNotFoundView' に失敗しました:System.NotSupportedException: のみプロパティアクセスは 設定に中間の呼び出しで をサポートしています。サポートされない式 framework.CreateQuery( "ユーザーから")。 Moq.ExpressionVisitor.VisitでMoq.Mock.AutoMockPropertiesVisitor.VisitMethodCallで Moq.ExpressionVisitor.Visit(式 EXP)で Moq.Mock.AutoMockPropertiesVisitor.VisitMethodCall(MethodCallExpression M)(MethodCallExpression M)で (式 Moq.Mockで Moq.Mock.GetInterceptor(LambdaExpression ラムダ、モックモック)で Moq.Mock.AutoMockPropertiesVisitor.SetupMocks(式 式)で EXP)。 Moq.Mock.Setup [T1、TResult]で<> c__DisplayClass12 機能)(モックモック、 式
1 expression) at Moq.Mock
1.Setup [TResult(Expression`1 式) コントローラ\ UserControllerTest。CS(29.0): Beta.Tests.Unit.Controllers.UserControllerTest.Details_InValidIndex_ReturnsNotFoundView()
エラーのスタックトレースを表示できますか?ユーザープロパティは抽象的か仮想的か? –