您将如何通过MOQ对FTPWebRequest和FTPWebResponse进行单元测试。
发布于 2011-03-30 18:55:28
你不能用Moq模拟FTPWebRequest或FTPWebResponse,因为它只允许你模拟接口或抽象类。而且看起来MS在编写大部分System.Net命名空间时并没有考虑到可测试性。这是我从Moq迁移到RhinoMocks的主要原因。
您需要构建自己的FTPWeb*对象,并将它们传递给您的处理程序。
发布于 2013-02-01 04:09:11
使用模拟也是不可能的,因为FTPWebResponse没有公开的构造函数来允许从它派生一些东西。
下面是我如何在类似的情况下编写测试。
被测方法:ExceptionContainsFileNotFound(Exception ex)包含如下逻辑:
if (ex is WebException)
{
var response = (ex as WebException).Response;
if (response is FtpWebResponse)
{
if ((response as FtpWebResponse).StatusCode == FtpFileNotFoundStatus)
{
return true;
}
}
}为了测试它,我实现了快速技巧。
try
{
var request = WebRequest.Create("ftp://notexistingfptsite/");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.GetResponse();
}
catch (WebException e)
{
// trick :)
classUnderTest.FtpFileNotFoundStatus = FtpStatusCode.Undefined;
var fileNotFoundStatus = classUnderTest.ExceptionContainsFileNotFound(e);
Assert.That(fileNotFoundStatus, Is.True);
}(当然,FtpFileNotFoundStatus不会向世界公开。)
发布于 2018-03-01 02:20:35
为此,我使用Rhino frameWork。
即使没有公共构造函数、只读属性等,它也可以处理实例创建。
示例:
var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);https://stackoverflow.com/questions/5485225
复制相似问题