0

私は単体テストの作成を支援するために JustMock を使用していますが、かなり単純だと思っていたものにたどり着きましたが、答えが見つかりません。コードを投稿することはできませんが、できる限り説明しようと思います。私がやろうとしていることを示す例を思いつきました。Class2 の CloseConnection メソッドを呼び出さずに、Class1 の Close メソッドをテストしたいと考えています。Class2 の CloseConnection のインスタンスで Mock.Arrange を使用してみましたが、アレンジするインスタンスに固有のものだと思います。単体テストとモック (サンプル コードの下のモック コード) をセットアップした後、Class1 の Close メソッド内でデバッグします。Class2 の依存関係が Class1 のコンストラクター内で作成され、アクセス権がないため、Class2 から CloseConnection メソッドを呼び出します。それに直接。

public class Class1
{
    private Class2 instanceOfClass2;

    public Class1()
    {
       instanceOfClass2 = new Class2();
    }

    public void Close()
    {
        // other code here
        instanceOfClass2.CloseConnection(true);
    }
}   

public class Class2
{
    public void CloseConnection(bool persist)
    {
        // Method I don't want executed
    }
}

Class1 の Close メソッドをテストし、JustMock を使用して Class2 の CloseConnection メソッドの呼び出しを無視する方法を知っている人はいますか?

私が試してみました:

Mock.Arrange(() => instanceOfClass2.CloseConnection(persist)).DoNothing();

モック化されたおよびモック化されていない class2 インスタンスとさまざまな引数 (つまり、Arg.IsAny()) とともに、このメソッド呼び出しの発生を防ぐことはできません。

コードのリファクタリングは私にとってオプションではないため、依存関係を注入するように変更することはできません。justmock を使用したコンストラクターのモックについて読みましたが、Class1 が使用する別のコンストラクターを作成する代わりに、コンストラクターを無視しているようです。 Class2にアクセスできるようにします。

何か案は?

更新 1: Telerik が私に戻ってきて、.IgnoreInstance() を使用してみるように言いましたが、それでも CloseConnection の呼び出しは妨げられませんでした。Telerik からの別の応答を待っています。

4

1 に答える 1