【发布时间】:2014-12-23 14:01:41
【问题描述】:
我正在测试一个带有 FakeItEasy 假对象的方法。假对象是一个MemoryStream。
[TestFixture]
public class ServerClientTests
{
private IWebClient webClient;
private ServerClient serverClient;
[SetUp]
public void Setup()
{
webClient = A.Fake<IWebClient>();
serverClient = new ServerClient(webClient);
var responseStreamBytes = Encoding.Default.GetBytes("OK");
var responseStream = new MemoryStream();
responseStream.Write(responseStreamBytes, 0, responseStreamBytes.Length);
responseStream.Seek(0, SeekOrigin.Begin);
var response = A.Fake<WebResponse>();
A.CallTo(() => response.GetResponseStream()).Returns(responseStream);
var request = A.Fake<WebRequest>();
A.CallTo(() => request.GetResponse()).Returns(response);
A.CallTo(() => webClient.GetRequest("http://localhost:8080/myserver")).Returns(request);
}
[Test]
public void Test1()
{
var result = serverClient.GetRequest("http://localhost/myserver");
Assert.AreEqual(2, result.Length);
}
}
这是正在测试的代码:
public interface IWebClient
{
WebRequest GetRequest(string url);
}
public class ServerClient
{
private readonly IWebClient client;
public ServerClient(IWebClient client)
{
this.client = client;
}
public Stream GetRequest(string url)
{
return client.GetRequest(url).GetResponse().GetResponseStream();
}
}
当我运行测试时,它给出了测试异常 => 预期:2 但是是:0
我在设置方法和调试测试中设置了断点。我看到假请求 GetResponse() 方法返回带有流的响应。 长度是2。
但在测试方法中,流Length为0。
FakeItEasy 有设置吗?或者我哪里错了?
【问题讨论】:
-
我不明白“有没有关于FakeItEasy的设置?”。如果您指的是文档,您可以在 github.com/FakeItEasy/FakeItEasy/wiki 找到它,链接到 FakeItEasy homepage。
标签: c# unit-testing mocking tdd fakeiteasy