私はこのようなリポジトリパターンを使用するアプリケーション、その後、個別のサービス層を設計しました:あなたが見ることができるように、私はRegisterメソッドの内部で、私のリポジトリをインスタンス化していますTDD - 私のサービスレイヤーを偽のリポジトリでテストしたいですが、どうですか?
public class RegistrationService: IRegistrationService
{
public void Register(User user)
{
IRepository<User> userRepository = new UserRepository();
// add user, etc
}
}
。今では単体テストを書いてみたいので、実際にそれを手に入れて偽のリポジトリに置き換えることはできません。
リポジトリをクラス変数として追加したくないのですが(コンストラクタで設定する)、コードが「臭い」になると思います(すべてのリポジトリがすべてのメソッドに必要なわけではなく、リポジトリなどを知るために呼び出しレイヤーが必要です)。
提案?
正しいパスを使用していますが、コンストラクタを介して依存関係を渡しても、コードが邪魔になることはありません。これは受け入れられた設計主体(制御の反転)です。 – ebrown
これはDIを使った単体テストに関する本当の話です:http://www.youtube.com/watch?v=wEhu57pih5w –