3

私を信じてください、私はここSOで多くの記事と質問を読みました。しかし、満足のいく答えは見つかりませんでした。例として、リポジトリ パターンと単体テストに関するMatt Robert のチュートリアルを取り上げます。

わかりません..両方のリポジトリにまったく同じクエリロジックが含まれていますか? そのように見えますが、もしそうなら、それはどのように有用なパターンですか? これは、偽のリポジトリでクエリを変更するたびに、実際のリポジトリでクエリ ロジックを変更する必要があることを意味します。これは、PITA と問題のレシピのように聞こえます。

クエリを1 つのメソッドに保持し、そのメソッドをテストしたいと思います。後で思いついたのですが、次のようにできます。

//Student can be from the db or a fake list
public person GetStudent(IEnumerable<Student> students,int studentid)
{
   return students.FirstOrDefault(s =>s.PersonId ==studentid);
}

//unit test
    Assert.IsNull(GetStudent(fakeStudentList, -1))
//actual code
    var student =  GetStudent(entities.students,-1) 

上記を模倣するパターンはありますか?もしそうなら、それは何ですか?それとも、実際にリポジトリ パターンがどのように機能するのでしょうか? もしそうなら、リポジトリ パターンがコードを複製しているように感じるのはなぜですか?

また、努力.. この恐ろしいを見てください:S?

4

1 に答える 1

2

先に進むことはあまりありませんが、リポジトリ パターンに欠陥があると思います。

学生コレクションを に渡すべきではありませんGetStudent()GetStudent学生リストについて内部的に知っているクラスの一部である必要があります-それがファイルであるかList、データベースであるかに関係なく。

したがって、「偽の」リポジトリ同じロジックを持っているか、ハードコードされたダミーを返すだけかもしれStudentません。リポジトリを偽造している場合は、リポジトリを必要とする他の何かをテストしているためだと思いますStudent

また、参照している記事では 1 つのリポジトリしか言及されていないため、複製する必要がある理由がわかりません。

于 2013-02-14T20:45:47.583 に答える