Skip to content

Instantly share code, notes, and snippets.

@stand-sure
Last active April 26, 2024 14:58
Show Gist options
  • Save stand-sure/3711eb8e8cda639e5db803aa9f8e7d37 to your computer and use it in GitHub Desktop.
Save stand-sure/3711eb8e8cda639e5db803aa9f8e7d37 to your computer and use it in GitHub Desktop.
Example of how to use Moq in ASP.NET MVC Unit Tests with NUnit
namespace MoqDemo.Tests
{
using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Moq;
using NUnit.Framework;
using HomeController = Controllers.HomeController;
[TestFixture]
public class HomeControllerTestClass
{
Mock<HttpRequestBase> request;
Mock<HttpResponseBase> response;
Mock<HttpContextBase> context;
RequestContext rc;
[SetUp]
public void Init()
{
request = new Mock<HttpRequestBase>(MockBehavior.Strict);
var cookies = new HttpCookieCollection();
request.SetupGet(req => req.Cookies).Returns(cookies);
var uri = new Uri("https://www.example.com/pixel?dr=https%3A%2F%2Fwww.example.com");
request.SetupGet(req => req.Url).Returns(uri);
var referrer = new Uri("https://www.example.com/referrer");
request.SetupGet(req => req.UrlReferrer).Returns(referrer);
request.SetupGet(req => req.UserAgent).Returns("my browser");
response = new Mock<HttpResponseBase>(MockBehavior.Strict);
response.SetupGet(resp => resp.Cookies).Returns(cookies);
response.Setup(resp =>
resp.SetCookie(It.IsAny<HttpCookie>()))
.Callback<HttpCookie>((cookie) => cookies.Add(cookie));
context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.SetupGet(ctx => ctx.Request).Returns(request.Object);
context.SetupGet(ctx => ctx.Response).Returns(response.Object);
rc = new RequestContext(context.Object, new RouteData());
}
[Test]
public void HomeShouldReturnAFile()
{
var controller = new HomeController();
controller.ControllerContext = new ControllerContext(rc, controller);
var actual = controller.Index();
Assert.IsInstanceOf<FileContentResult>(actual, "Expected a FileResult");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment