私は、持続性の無知を尊重しようと積極的に取り組んでいる新しいプロジェクトに取り組んでいます。例として、私のサービス レイヤーでは、ORM からエンティティを取得し、エンティティに変更を加える場合としない場合があるエンティティで定義されたルーチンを呼び出します。次に、ORM に依存して、エンティティが変更されたかどうかを検出し、必要な挿入/更新/削除を行います。
アプリケーションを実行すると、意図したとおりに動作し、これが実際に動作しているのを見るのは本当に素晴らしいことです。私のビジネス ロジックは非常に分離されており、私のサービス レイヤーは非常に薄いです。
もちろん、今は単体テストを追加していますが、特定のプロパティが変更されたかどうかを検証する単体テストを記述できないことに気付きました。以前のソリューションでは、オブジェクトが期待される状態でリポジトリ呼び出しが行われたかどうかを判断しました。
mockRepository.Verify(mr =>
mr.SaveOrUpdate(It.Is<MyEntity>(x =>
x.Id == 123 && x.MyProp == "newvalue")), Times.Once());
持続性の無知に正しく近づいていますか? リポジトリの保存メソッドを明示的に呼び出さない場合に、エンティティの操作後の状態を単体テストするより良い方法はありますか?
それが役立つ場合、私は ASP.NET MVC 3、WCF、NHibernate、および NUnit/Moq を使用しています。単体テストは、サービス クラスのインスタンスを渡すコントローラー アクションを呼び出します (モック リポジトリでインスタンス化されます)。