問題のドメインが高度に相互に関連するドメイン オブジェクトによって表されるアプリケーションがあります。モデルに順序を課すのに役立ついくつかの集約ルート オブジェクトにドメインを分割しましたが、これらの集約ルートのインスタンスを作成するには、参照される多数のサポート オブジェクトを作成する必要があるため、単体テストの前提条件を調整するのは困難です。
私は、外部依存関係を必要とせずに (そして理想的には大量のコードを書かずに) アプリケーションを実行する、反復可能で分離された単体テストを作成したいと考えています。
これらは私の選択肢だと思います。好み、または他の提案はありますか?
プロジェクト データベースをセットアップし、既知のデータをそこに挿入するビルド スクリプトを記述します。これに対して単体テストが実行されます。これは、外部依存関係 (したがって、真の単体テストではない) を導入するだけでなく、さらに多くの潜在的な失敗をもたらすため、私が最も好まないオプションです。また、障害がデータ アクセス コード内にある可能性があるため、テスト対象のビジネス機能を分離することもできません。
単体テストが実行される既知の状態でドメイン オブジェクトを作成する、再利用可能なファクトリを作成します。これはうまく機能しますが、多くのボイラープレート コードを作成する必要があるため、モデルが変更された場合に変更する必要があることを意味します。
(現在の方法) テスト プロジェクトでチェックインされるファイルに集計ルート オブジェクトのバイナリ シリアル化を作成します。単体テストは、テストのためにそれらを逆シリアル化します。これの欠点は、基になる型が変更された場合、逆シリアル化が失敗し、すべてのシリアル化されたファイルを再作成する必要があることです。
思い切って、ソリューションにチェックインしてテスト時に逆シリアル化できる XML ファイルにグラフをシリアル化するカスタム シリアライザーを作成します。2と同様、前もってボイラープレートのコードをたくさん書く必要がありますが、モデルが変更された場合、シリアル化された状態をテキスト エディターで簡単に編集できるため、メンテナンスが容易になります。
UR DOIN IT RONG. ドメイン オブジェクトの参照性が非常に高いという事実が主な問題です。単純化します。
ありがとう!