2013-12-15 16 views
8

Sto provando a eseguire un test unitario su un metodo in una classe astratta. Ho condensato il codice qui sotto:Utilizzo di Moq per testare una classe astratta

astratta Classe:

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

prova:

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

Messaggio:

Method is not public 

Che cosa sto facendo male qui? Il mio obiettivo è testare i metodi all'interno della classe astratta usando il framework Moq.

+0

Hai visto questa discussione? http://stackoverflow.com/questions/3604721/how-to-test-a-method-in-an-abstract-class-with-abstract-methods – Dilish

risposta

7

Il messaggio è perché il metodo di test non è pubblico. I metodi di prova devono essere pubblici. Anche dopo aver reso pubblico il metodo di test, fallirà, poiché è possibile verificare solo i metodi astratti/virtuali. Quindi nel tuo caso dovrai rendere il metodo virtuale dal momento che hai implementato.

+0

Grazie funziona ora – Guerrilla

2

Se si desidera simulare metodi in una classe astratta come questa, è necessario renderlo virtuale o astratto.

Problemi correlati