我正在Rhinomocks框架的帮助下为c#方法编写单元测试用例。在我的实际方法中,我从System.Net.Http.HttpRequestMessage
命名空间下的 Uri 属性访问Scheme属性。
在实际方法中,可以像_requestContext.RequestMessage.RequestUri.Scheme
那样访问scheme属性。
运行单元测试用例时,当它尝试访问/读取scheme属性时,它会在我的实际实现方法中崩溃。
为了模拟URI和Scheme属性,我尝试了以下方式,但无法正常工作。
var uri = new Uri("http://tempuri.org/");
//requestContext.Expect(r => r.RequestMessage.RequestUri).Return(uri).Repeat.Any();
requestContext.Stub(x => x.RequestMessage.RequestUri).Return(uri);
requestContext.Stub(x => x.RequestMessage.RequestUri.Scheme).Return("http");//this is the value the scheme should return when it is accessed inside the actual method
为Uri下的Scheme属性创建存根/模拟的正确方法是什么。
注意:我指的是System.Net.Http.HttpRequestMessage命名空间下的Uri属性。
答案 0 :(得分:0)
示例中使用的具体Uri
将包括该方案。无需进一步模拟它。
var uri = new Uri("http://tempuri.org/");
var scheme = uri.Scheme; //return "http"
requestContext.Stub(x => x.RequestMessage.RequestUri).Return(uri);
因此,调用RequestMessage.RequestUri.Scheme
将从具体的Uri
返回该方案。如您已经知道并在原始帖子中所述,在这种情况下为http
。
还要根据您对我的原始建议的评论,然后建议您创建一个实际的HttpRequestMessage
并根据需要填充它。
var uri = new Uri("http://tempuri.org/");
var request = new HttpRequestMessage(HttpMethod.Get, uri);
requestContext.Stub(x => x.RequestMessage).Return(request);
现在,由于使用了实际的实现,因此无需模拟与该请求相关的其他任何事情。