単体テスト (TDD) で足を濡らしています。テストしようとしている基本的なリポジトリ パターンがありますが、正しく行っているかどうかはよくわかりません。この段階では、ドメインをテストしており、コントローラーとビューについては心配していません。簡単にするために、ここにデモ プロジェクトを示します。
クラス
public class Person
{
public int PersonID { get; set; }
public string Name{ get; set; }
}
インターフェース
public interface IPersonRepository
{
int Add(Person person);
}
コンクリート
public class PersonnRepository : IPersonRepository
{
DBContext ctx = new DBContext();
public int Add(Person person)
{
// New entity
ctx.People.Add(person);
ctx.SaveChanges();
return person.id;
}
}
NUnit と MOQ をテスト プロジェクトに追加しましたが、機能を適切にテストする方法を知りたいです。
それが正しいかどうかはわかりませんが、いくつかのブログを読んだ後、FakeRepository を作成することになりましたが、これに基づいてテストすると、実際のインターフェイスがどのように検証されるのでしょうか?
public class FakePersonRepository
{
Dictionary<int, Person> People = new Dictionary<int, Person>();
public int Add(Person person)
{
int id = People.Count + 1;
People.Add(id, person);
return id;
}
}
次に、
[Test]
public void Creating_A_Person_Should_Return_The_ID ()
{
FakePersonRepository repository = new FakePersonRepository();
int id = repository.Add(new Person { Name = "Some Name" });
Assert.IsNotNull(id);
}
私は正しい方法でテストに近いところにありますか?
名前を渡さないとエラーが発生するなど、今後テストしたいと思います。