給定一個基本庫界面:ASP.NET MVC - 如何單元測試存儲庫模式中的邊界?
public interface IPersonRepository
{
void AddPerson(Person person);
List<Person> GetAllPeople();
}
有了一個基本的實現:
public class PersonRepository: IPersonRepository
{
public void AddPerson(Person person)
{
ObjectContext.AddObject(person);
}
public List<Person> GetAllPeople()
{
return ObjectSet.AsQueryable().ToList();
}
}
這怎麼能以一種有意義的方式,你的單元測試?由於它跨越邊界並從數據庫中進行物理更新和讀取,這不是單元測試,而是集成測試。
還是想要單元測試這首先是錯誤的?我應該只在存儲庫上進行集成測試嗎?
我一直在google搜索主題和博客經常說做一個實現IRepository存根:
public class PersonRepositoryTestStub: IPersonRepository
{
private List<Person> people = new List<Person>();
public void AddPerson(Person person)
{
people.Add(person);
}
public List<Person> GetAllPeople()
{
return people;
}
}
但是,這並不單元測試PersonRepository,它測試PersonRepositoryTestStub(不是非常有幫助)的實施。
是的,那就是我所傾向的。我的下一個問題是關於下一層(在這種情況下是IService)。如果存儲庫不值得測試,並且PersonService.GetAllPeople()簡單地說「return _repository.GetAllPeople();」,那麼測試中是否有任何要點? – 2010-05-13 01:28:44
@JK測試它沒有任何好處。如果一個類/方法只是在其他類之間提供粘合,我通常不會單獨測試它。我只是將所有東西連接在一起,並運行幾種方法的煙霧/集成測試。例如。我可以創建一個新對象,保存並檢索它嗎? – Ryan 2010-05-13 01:39:47
你可以測試你的倉庫被調用。我同意這不是一個有意義的測試,我會專注於測試那些對您的業務更批評的方法。 – uvita 2010-05-13 01:45:11