使用rhino模拟创建一个测试用例来模拟一个web客户端方法

本文关键字:一个 模拟 web 客户端 方法 测试用例 使用 rhino 创建 | 更新日期: 2023-09-27 18:06:26

我是rhino mock的新手,我需要为以下方法编写一个单元测试用例:

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);
    }

请告诉我如何在这种情况下使用mock

使用rhino模拟创建一个测试用例来模拟一个web客户端方法

你的方法正在调用实际的web客户端方法,因为实际的web客户端在容器中注册为IFileArchiveService的实现。

要使用存根,您需要在调用archive.PutFileInArchive()之前将fileArchiveService作为IFileArchiveService的实现放入container
例如

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

实际上,我建议为测试和应用程序使用不同的容器。