0

内部仮想メソッドをモックしようとしています。デバッグすると、期待どおりの場所に到達し、内部仮想メソッドが実行されていることがわかりますが、テストは失敗します。さらに、「この」コンテキストがプロキシであり、通常のクラス インスタンスではないことを確認しました。

方法:

public void MyMethod() { MyInternalMethod() }
internal virtual void MyInternalMethod() {}

単体テストの一部:

Because of = () => { myMock.Object.MyMethod() };

It should_run_inner_internal_virtual_MyInternalMethod = () =>
{
              myMock.Verify(x => x.MyInternalMethod(),Times.Once());
};

どんな助けにも感謝します。

敬具。

4

1 に答える 1

0

コードがコンパイルされるかどうかはわかりませんが、Moq とテスト対象のクラスは異なるアセンブリにあるため、テスト対象のオブジェクトのアセンブリに内部を Moq のアセンブリに表示するように指示する必要があると思います。internal は、メソッド/プロパティ/クラスをそのアセンブリに可視にするだけです。

これを AssemblyInfo.cs ファイルに追加してみてください (テスト対象のアセンブリ用)。

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 

DynamicProxyGenAssembly2 が Moq のアセンブリ名であると仮定します。テストが別のアセンブリにもある場合は、そのアセンブリからも内部を見えるようにする必要があります。このための nunit テストを書いたところ、合格しました。

[Test]
public void ShouldCallMyInternalMethodFromMyMethod()
{
  myMock = new Mock<MyClass>();
  myMock.Object.MyMethod();
  myMock.Verify(mockObj=> mockObj.MyInternalMethod(), Times.Once());
}
于 2013-04-25T17:35:43.150 に答える