web-dev-qa-db-ja.com

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

メッセージ:

Method is not public

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

12
Guerrilla

このメッセージは、テストメソッドが公開されていないためです。テスト方法は公開する必要があります。テストメソッドを公開した後でも、抽象/仮想メソッドしか検証できないため、失敗します。したがって、あなたの場合、実装があるので、メソッドを仮想化する必要があります。

14
Adarsh Shah

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

4
Adam Rackis