私はユニットテストでモックオブジェクトの使用を検討してきましたが、.NET用のMoqフレームワークを試しています。私は、データベースからドメインオブジェクトを返すサービスレイヤメソッドをテストしようとする際にいくつか問題があります。ここでユニットテストでMoqを使用する際の問題
は私の設定です:ここでは
[SetUp]
public void DoSetupTasks()
{
mockDao = new Mock<IHibernateDao>();
_hibernateService = new HibernateService(mockDao.Object);
mockDomainObject = new Mock<DomainBase>();
dmBase = new DomainBase()
{
Id = 5
};
}
は私が問題を抱えていますユニットテストです。メソッドFindById()
は、指定されたIDとタイプに基づいてDomainBaseオブジェクトを返します。私はユニットテストを実行すると
[Test]
public void TestFindById()
{
mockDomainObject.Setup(dmb => dmb.Id.Equals(It.IsAny<long>())).Returns(true);
mockDao.Setup(dao => dao.FindById(
It.IsAny<long>(),
It.IsAny<Type>()
)).Returns(mockDomainObject.Object);
_hibernateService.FindById(dmb.Id, typeof(DomainBase));
mockDomainObject.VerifySet(dmb => dmb.Id = dmBase.Id);
}
、それは次の例外がスローされます。
Exception: Invalid setup on a non-virtual (overridable in VB) member: dmb => dmb.Id.Equals(It.IsAny<Int64>())
私は認めるよ、私はフレームワークとかなり慣れていないんです。私はそれについていくつかのチュートリアルに従おうとしてきましたが、私はそれを理解することができませんでした。
ありがとうございます!私はこれを打ち明けて、明日に戻ってきますが、ちょうどあなたのコードを見て、それはずっと今よりずっと意味があります。 –
あなたの例は素晴らしい仕事でした。もう一度ありがとう、ディラン。もう1つの質問:ドメインオブジェクトのデータベースへの永続化またはオブジェクトの削除を検証するテストを作成するにはどうすればよいですか? –
編集を参照してください。これはまったく同じ原理ですが、逆に、ドメインオブジェクトを作成してサービスメソッドに渡し、コールバックを介してサービスレイヤが適切なオブジェクトをDAOの正しいメソッドに渡していることを確認します。 –