抽象クラスのメソッドで単体テストを実行しようとしています。以下のコードを要約しました。
抽象クラス:
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フレームワークを使用して抽象クラス内のメソッドをテストすることです。
このメッセージは、テストメソッドが公開されていないためです。テスト方法は公開する必要があります。テストメソッドを公開した後でも、抽象/仮想メソッドしか検証できないため、失敗します。したがって、あなたの場合、実装があるので、メソッドを仮想化する必要があります。
このような抽象クラスのメソッドをモックしたい場合は、それを仮想または抽象にする必要があります。