0

私は rhino Mocks を初めて使用し、次のメソッドの単体テスト ケースを作成する必要があります。

public string PutFileInArchive(string fileName, string userId, string mimeType, byte[] fileContents, IocContainer container)
    {
        string archiveId;

        try
        {
            IArchiveService _archiveService = container.Resolve<IArchiveService>();
            archiveId = _archiveService.Archive(fileName, mimeType, userId, fileContents);
        }
        catch (Exception ex)
        {             
            throw;
        }

        return archiveId;
    }

上記のメソッドは、モックする必要がある Web クライアント メソッドを内部的に呼び出します。スタブを作成しましたが、使用方法がわかりません。私のメソッドは常に実際の webclient メソッドを呼び出しています。

[TestMethod()]
    public void Archive_PutFileInArchive_ShouldPut()
    {
        StreamReader reader = new StreamReader("C:\\File.txt");
        MemoryFile file = new MemoryFile(reader.BaseStream, "string", "File.txt");

        HttpPostedFileBase postedFile = file;

        var fileContents = new byte[file.ContentLength];
            file.InputStream.Read(fileContents, 0, file.ContentLength);

        IFileArchiveService fileArchiveService = MockRepository.GenerateMock<IFileArchiveService>();

        fileArchiveService.Stub(x => x.Archive("File.txt", "text/plain", "webuser1", fileContents)).Repeat.Once().Return("12345");

        Archive archive = new Archive();
        string fileid = archive.PutFileInArchive("File.txt", "webuser1", "text/plain", fileContents, container);

        Assert.AreEqual("12345", fileid);
    }

この種のシナリオでモックを使用する方法を教えてください。

4

1 に答える 1

0

実際の webclient は の実装としてコンテナーに登録されているため、メソッドは実際の webclient メソッドを呼び出していIFileArchiveServiceます。

代わりにスタブを使用するには、呼び出す前にfileArchiveServicecontainer実装として入れる必要があります。IFileArchiveServicearchive.PutFileInArchive()

container.RegisterInstance<IFileArchiveService>(fileArchiveService);
string fileid = archive.PutFileInArchive("File.txt", "webuser1", "text/plain", fileContents, container);

実際には、テスト用とアプリケーション用に異なるコンテナーを使用することをお勧めします。

于 2013-03-28T15:37:03.947 に答える