2013-12-15 22 views
8

抽象クラスのメソッドに対して単体テストを実行しようとしています。Moqを使用して抽象クラスをテストする

抽象クラス:私は以下のコードを凝縮している

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

テスト:

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

がMessage:私はここで何が問題を

Method is not public 

をやっていますか?私の目標は、Moqフレームワークを使用して抽象クラス内のメソッドをテストすることです。

+0

このスレッドは見ましたか? http://stackoverflow.com/questions/3604721/how-to-test-a-method-in-an-abstract-class-with-abstract-methods – Dilish

答えて

7

あなたのテストメソッドが公開されていないためです。試験方法は公表する必要がある。テストメソッドをパブリックにした後でさえ、抽象/仮想メソッドのみを検証できるので失敗します。したがって、あなたの場合は実装があるのでメソッドをバーチャルにする必要があります。

+0

ありがとうございます – Guerrilla

2

このような抽象クラスでメソッドをモックする場合は、仮想メソッドまたは抽象メソッドにする必要があります。

関連する問題