相关疑难解决方法(0)

使用Moq模拟HttpContextBase

我有一个单元测试夹具,我正在尝试在ASP.NET MVC控制器上测试一个ControllerAction,该控制器用于Web应用程序上的成员函数.我正在尝试模拟测试的HttpContext.正在测试的ControllerAction实际上设置了HttpContext的属性,例如Session值,Response.Cookies值等.这不是所有代码,但这里是我试图运行的测试的粗略示例:

[Test]
public void ValidRegistrationDataSuccessfullyCreatesAndRegistersUser()
{
    var context = new Mock<HttpContextBase>() {DefaultValue = DefaultValue.Mock};
    context.SetupAllProperties();
    var provider = new Mock<MembershipProvider>(new object[] {context.Object});
    var controller = new AccountController(context.Object, provider.Object);
    // This just sets up a local FormCollection object with valid user data 
    // in it to use to attempt the registration
    InitializeValidFormData();
    ActionResult result = controller.Register(_registrationData);
    Assert.IsInstanceOfType(typeof(ViewResult), result);
    // Here is where I'd like to attempt to do Assertions against properties 
    // of the HttpContext, like ensuring that a Session …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc moq

23
推荐指数
2
解决办法
2万
查看次数

如何使用ASP.NET 5(MVC 6)中的Response属性对Controller操作进行单元测试?

ASP.NET Core 1.0(MVC 6)项目中,我有一个Controller操作方法,我在其中使用该Response属性来设置标头:

[HttpGet]
public IActionResult Get()
{
    ...

    Response.Headers.Add("Location", location);

    ...
}
Run Code Online (Sandbox Code Playgroud)

我尝试为此操作方法实现单元测试,但该Response属性的值为null.

这在以前的ASP.NET版本中很容易解决,因为该Response属性具有setter,您可以HttpResponse在单元测试期间将其值设置为新实例.

但是在ASP.NET 5 Response中没有setter,只有一个getter.
如何Response在单元测试中设置值?

更新:只是说清楚:这个问题是关于ASP.NET Core 1.0.另一个链接为重复的问题是关于ASP.NET 4,从那以后Api发生了变化,所以那里的答案不适用于这个问题.

c# asp.net asp.net-core-mvc asp.net-core

8
推荐指数
1
解决办法
9164
查看次数

如何在Visual Studio单元测试框架中将视图呈现为字符串?

如果我创建一个新的MVC 5项目(使用单元测试)并使用来自流行的SO答案的片段为我的控制器创建一个新的超类,则很容易将视图的内容呈现为字符串:

HomeController.cs

public class HomeController : StringableController
{
    public ActionResult StringIndex()
    {
        string result = RenderRazorViewToString("Index", null);

        return Content(result);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我访问/Home/StringIndex,我会返回该视图的原始HTML.整洁(即使不是很有用)!但是在.Tests项目中,如果我尝试在单元测试中测试StringIndex()...

HomeControllerTest.cs

[TestClass]
public class HomeControllerTest
{
    [TestMethod]
    public void StringIndex()
    {
        HomeController controller = new HomeController();

        ContentResult result = controller.StringIndex() as ContentResult;
        string resultString = result.Content;

        Assert.IsTrue(resultString.Contains("Getting started"));
    }
}
Run Code Online (Sandbox Code Playgroud)

......没有这样的运气.调用controller.StringIndex()从单元测试创建ArgumentNullExceptionSystem.Web.Mvc.ViewEngineCollection.FindPartialView()被称为在上述的代码段,考虑的controllerContextnull.我已经尝试了几起订量为基础的办法(修改后的版本SetUpForTest()MvcMockHelpers)嘲笑了controllerContext,但是这可能是错误的做法,因为:1)这两种方法都不是专门针对Visual Studio中的单元测试,以及2)我不能完全肯定为了成功渲染视图,需要真实与模拟的内容.

在Visual …

asp.net-mvc unit-testing razor vs-unit-testing-framework visual-studio-2013

7
推荐指数
1
解决办法
2654
查看次数