我正在为我的WEB API服务编写单元测试。我想模拟来自IP地址的请求。我正在使用Microsoft单元测试。
[TestClass]
public class UnitTest1
{
private Mock<HttpContextBase> moqContext;
private Mock<HttpRequestBase> moqRequest;
[TestMethod()]
public void TestMethod1()
{
var controller = new TestController();
controller.ControllerContext = new ControllerContext(moqContext.Object, new System.Web.Routing.RouteData(), controller);
}
[TestInitialize]
public void SetupTests()
{
// Setup Moq
moqContext = new Mock<HttpContextBase>();
moqRequest = new Mock<HttpRequestBase>();
moqContext.Setup(x => x.Request).Returns(moqRequest.Object);
moqContext.Setup(x => x.Request.UserHostAddress).Returns("192.111.1.1");
}
}
我不知道该如何进行进一步操作,我正在出错。
> Severity Code Description Project File Line Suppression State
> Error CS1503 Argument 3: cannot convert from
> 'WebApplication1.Controllers.TestController' to
> 'System.Web.Mvc.ControllerBase' UnitTestProject1
任何帮助表示赞赏。 MOQ是否比Rino更好,而且是避免使用虚拟方法进行MOQ测试的替代方法。
更新 好的,因此控制器是如下所示的API控制器
// GET: api/Test
public IEnumerable<string> Get()
{
string s =HttpContext.Current.Request.UserHostAddress;
...Authentication/Authorization based on IP address
return new string[] { s };
}
我想在单元测试中模拟HttpContext.Current.Request.UserHostAddress,以便测试其他IP地址。我的问题是如何设置模拟IP地址。我找到了一个链接https://blog.slatner.com/geeky/mocking-request-userhostaddress-in-asp-net-mvc.html。但我不知道如何使用。任何帮助表示赞赏。
答案 0 :(得分:0)
这意味着您的TestController
类不会继承自System.Web.Mvc.ControllerBase
。因此,请返回您的TestController
的定义,并确保它看起来像
public class TestController: System.Web.Mvc.ControllerBase
{ /* your code here */ }
答案 1 :(得分:0)
您是否尝试过设置模拟 request 对象?
// moqContext.Setup(x => x.Request.UserHostAddress).Returns("192.111.1.1"); <-- not this
moqRequest.Setup(x => x.UserHostAddress).Returns("192.111.1.1")