2013-12-15 10 views
8

Próbuję uruchomić test jednostkowy dla metody w klasie abstrakcyjnej. Mam skondensowane poniższy kod:Używanie Moq do testowania abstrakcyjnej klasy

klasa abstrakcyjna:

public abstract class TestAb 
{ 
    public void Print() 
    { 
     Console.WriteLine("method has been called"); 
    } 
} 

Test:

[Test] 
void Test() 
{ 
    var mock = new Mock<TestAb>(); 
    mock.CallBase = true; 
    var ta = mock.Object; 
    ta.Print(); 
    mock.Verify(m => m.Print()); 
} 

Wiadomość:

Method is not public 

Co robię źle tutaj? Moim celem jest przetestowanie metod wewnątrz klasy abstrakcyjnej za pomocą frameworka Moq.

+0

Czy widzisz ten wątek? http://stackoverflow.com/questions/3604721/how-to-test-a-method-in-an-abstract-class-with-abstract-methods – Dilish

Odpowiedz

7

Wiadomość jest, ponieważ Twoja metoda testu nie jest publiczna. Metody testowe muszą być publiczne. Nawet po upublicznieniu metody testowej zakończy się ona niepowodzeniem, ponieważ możesz tylko weryfikować metody abstrakcyjne/wirtualne. W twoim przypadku będziesz musiał uczynić metodę wirtualną, ponieważ masz implementację.

+0

Dzięki to działa teraz – Guerrilla

2

Jeśli chcesz kpić z metod na takiej abstrakcyjnej klasie, musisz ją uczynić wirtualną lub abstrakcyjną.