mam klasy repozytorium (DAL)
public class MyRepository : IMyRepository
{
public void Delete(int itemId)
{
// creates a concrete EF context class
// deletes the object by calling context.DeleteObject()
}
// other methods
}
również mieć klasę usług, (bil)
public class MyService
{
private IMyRepository localRepository;
public MyService(IMyRepository instance)
{
this.localRepository = instance;
}
public void Delete(int itemId)
{
instance.Delete(itemId);
}
// other methods
}
Tworzenie test jednostki do MyRepository zajęłoby znacznie więcej czasu niż wdrożenie, ponieważ musiałbym kpić z kontekstu Entity Framework.
Jednak tworzenie testu jednostkowego dla usługi MyService wydaje się bzdurą, ponieważ wywołuje tylko repozytorium. Mogę tylko sprawdzić, czy rzeczywiście wywołał metodę usuwania repozytorium.
Pytanie
Jak proponujesz do badanej jednostki te parę metod usunąć. Obie? Jeden? Żaden? A co byś przetestował?
Ale jeśli testuję metodę Service.Delete(), wszystko, co mogę zrobić, to sprawdzić, czy wywołuje ona metodę Repository.Delete(). Nie mogę sprawdzić żadnych danych, ponieważ manipulowanie danymi odbywa się w repozytorium. Inne (przyszłe) zawiłości nie zostaną uwzględnione w teście. –
@Robert To nie do końca poprawne. Będziesz musiał stworzyć fałszywy obiekt IMyRepository. Gdy to zrobisz, możesz skonfigurować próbę, aby po wywołaniu warstwy usługi usuwać na niej, możesz sprawdzić, czy usuwanie jest wywoływane na fałszywej próbce. Dlatego testujesz funkcjonalność Service.Delete bez testowania Repository.Delete. – Joseph