0

File.OpenWrite() で開くファイルに書き込む単体テストを作成しようとしています。

File を SystemWrapper の IFileWrap インターフェイスでラップしています。本番環境では、SimpleInjector を使用して SystemWrapper の FileWrap クラスのインスタンスを注入していますが、問題なく動作しています。しかし、単体テストで MOQ を使用して IFileWrap をモックしようとしていますが、うまくいきません。

私は SystemWrapper を初めて使用し、その使用方法を理解するために最善を尽くしています。私が知る限り、IFileWrap.OpenWrite() は IFileWrap インスタンスを返し、そこから FileStreamInstance でストリームを取得できます。

したがって、テスト対象のクラスでは、コンストラクターに IFileWrap を挿入します。

public class ClassUnderTest
{
    private readonly IFileWrap fileWrap;

    public ClassUnderTest(IFileWrap fileWrap)
    {
        this.fileWrap = fileWrap;
    }

    ...
}

テスト対象のメソッドでは、FileStreamInstance からストリームを取得します。

var fsWrap = this.fileWrap.OpenWrite(fullPath);
var ostream = fswrap.FileStreamInstance;

これは、fileWrap が FileWrap のインスタンスでインスタンス化される本番環境では正常に機能します。しかし、私のテストでは、モック化された FileStream を返す File.OpenWrite のモックを作成しようとしています。

var fileStreamMock = new Mock<IFileStreamWrap>();

var fileMock = new Mock<IFileWrap>();
fileMock.Setup(fm => fm.OpenWrite(It.IsAny<string>())).Returns(fileStreamMock.Object);

var classUnderTest = new ClassUnderTest(fileMock.Object);

そして、単体テストからデバッガーでテスト中のメソッドをウォークスルーすると、fsWrap.FileStreamInstance は null になります。

私が間違っていることについてのアイデアはありますか?

4

2 に答える 2