2013-02-25 15 views
8

Witam Jestem nowy w testowaniu Moq i mam trudny czas na proste stwierdzenie. jestem przy użyciu interfejsuMetoda testowania pustej przestrzeni Moq

public interface IAdd 
{ 
    void add(int a, int b); 
} 

Min interfejsu IAdd jest:

Mock<IAdd> mockadd = new Mock<IAdd>(); 
    mockadd.Setup(x => x.add(It.IsAny<int>(), It.IsAny<int>()).callback((int a, int b) => { a+b;}); 
    IAdd testing = mockadd.Object; 

Ponieważ metoda add jest nieważne, to nie zwraca żadnej wartości dochodzić z. Jak mogę potwierdzić tę konfigurację?

+2

Co próbujesz przetestować? – GolfWolf

+0

Próbuję przetestować tę metodę dodawania, ale nie ma ona żadnego typu zwracanego. Gdyby miał int jako typ zwracany, testowałbym Assert.AreEqual (mockadd.add (2,2), 4); Ale bez typu zwrotu, jak przetestować metodę dodawania. –

+2

** 1. ** Nie ma sensu testowanie interfejsu (lub fałszywej implementacji). ** 2. ** Jeśli masz klasę, która coś wylicza, możesz chcieć jakoś udostępnić wynik (albo przez wartość zwracaną albo jakąś własność na tym obiekcie). – GolfWolf

Odpowiedz

14

Lepiej dostarczyć więcej kontekstu, ale zwykle jest stosowany tak:

var mockAdd = new Mock<IAdd>(); 
mockAdd.Setup(x => x.Add(1, 2)).Verifiable(); 

//do something here what is using mockAdd.Add 

mockAdd.VerifyAll(); 
+0

Pavel, czy możesz wyjaśnić trochę więcej o // zrobić coś tutaj, co używa mockAdd.Add. Utknąłem na podobnym problemie i nie wiem, co dodać do "// zrobić coś, co jest za pomocą mockAdd.Add". – Maddy

18

Czemu służy kpiny? Użyto go do sprawdzenia, czy SUT (system under test) poprawnie współdziała z jego zależnościami (które powinny być wyśmiewane). Właściwa interakcja oznacza wywoływanie prawidłowych elementów zależnych o poprawnych parametrach.

Powinieneś/powinnaś nigdy nie zapewniać wartości zwróconej przez próbę. Jest to fikcyjna wartość, która nie ma związku z kodem produkcyjnym. Jedyną wartością, na którą powinieneś się zwrócić, jest wartość zwracana przez SUT. SUT jest jedyną rzeczą, dla której powinieneś pisać twierdzenia.

Powinieneś również nigdy nie testować interfejsów. Ponieważ nie ma nic do przetestowania. Interfejs to tylko opis API. Nie ma implementacji. Więc zatrzymaj się i zastanów się, jaki kod testujesz tutaj? Czy jest to prawdziwy kod, który został wykonany w twojej aplikacji?

Powinieneś więc kpić z interfejsu IAdd tylko dla obiektu testującego, który używa interfejsu IAdd.

+0

Cześć Sergey, jestem nowy na tych próbnych testach. Chciałbym uniknąć metody void do wykonania, metoda aktualizuje bazę danych, czy jest to lepszy sposób na zrobienie tego? –

Powiązane problemy