为Rhinomocks中的Uri下的Scheme属性创建存根/模拟的正确方法是什么

问题描述 投票:1回答:1

我正在使用Rhinomocks框架为c#方法编写单元测试用例。在我的实际方法中,我从System.Net.Http.HttpRequestMessage命名空间下的Uri属性访问Scheme属性。

scheme属性在实际方法中像_requestContext.RequestMessage.RequestUri.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属性。

c# unit-testing mocking rhino-mocks stub
1个回答
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);

现在,不需要模拟与请求相关的任何其他内容,因为使用了实际的实现。

© www.soinside.com 2019 - 2024. All rights reserved.