2013-12-15 13 views
8

Ich versuche, einen Komponententest für eine Methode in einer abstrakten Klasse auszuführen.Verwenden von Moq zum Testen einer abstrakten Klasse

Abstrakte Klasse:: Ich habe den Code unten kondensiert

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()); 
} 

Nachricht:

Method is not public 

Was mache ich falsch hier? Mein Ziel ist es, die Methoden innerhalb der abstrakten Klasse mit dem Moq-Framework zu testen.

+0

Haben Sie diesen Thread gesehen? http://stackoverflow.com/questions/3604721/how-to-test-a-method-in-a-abstract-class-with-abstract-methods – Dilish

Antwort

7

Die Nachricht ist, weil Ihre Testmethode nicht öffentlich ist. Testmethoden müssen öffentlich sein. Auch nachdem Sie die Testmethode veröffentlicht haben, wird sie fehlschlagen, da Sie nur abstrakte/virtuelle Methoden überprüfen können. In diesem Fall müssen Sie die Methode virtuell machen, da Sie eine Implementierung haben.

+0

Danke, es funktioniert jetzt – Guerrilla

2

Wenn Sie Methoden für eine abstrakte Klasse wie diese vortäuschen möchten, müssen Sie sie entweder virtuell oder abstrakt machen.

Verwandte Themen