私は最近、特別なフォーマットのファイルからデータベースにデータをインポートするためのシンプルなユーティリティを作成するタスクを持っています。私は少数のクラス(プログラムクラスはビジネスロジッククラスで動作し、ビジネスロジッククラスはデータアクセスクラスで動作する)でコンソールアプリケーションを実装しました。すべてがうまくいきますが、今では単体テストやリファクタリングアプリケーションを作成することを考えています(これまでの単体テストを作成していないので、このアプリケーションは練習には最適なフィールドだと思います) 。データアクセス、ユニットテスト、依存性注入
これは問題です:データアクセスクラスが静的にされていますが、これを模擬して結果として実際の単体テストを作成することはできません。これを修正するには、インターフェイスを作成してデータアクセスクラスに実装する必要があります。また、ビジネスロジッククラスにそのインターフェイスタイプのパラメータを受け入れるコンストラクタを追加する必要があります。これは、アプリケーションのMain()メソッドでデータアクセスクラスを作成することになりますが、これが最善の方法ではないことがわかります(エントリポイントがデータアクセスに関するいくつかのことを知っていなければならないのでしょうか?はるかに長いか、いくつかの鎖があるはずですか?)。私はいくつかのIoCコンテナを使用することができますが、これはコンテナを使用するには単純すぎるアプリケーションだと思います。
ありがとうございます!代わりに、直接データアクセスクラスあなたを呼び出す、使用ヘルパーメソッド:
public void insert (...) {
DataAccess.insert (...);
}
今、あなたはこれらの呼び出しを無効にすることができます。ここ
+1:ニースの答え!私は特に、「どこが止まったのか」という行が好きです。DIコンテナに関する良いコメントもあります。 – TrueWill
@ジェフ - ありがとう、私はそれを試してみましょう。私の悲観的な存在は私にいくつかの隠された落とし穴があるはずだと言っています:) – Dev
@Dev:懐疑主義は敬虔の次です! ;) –