Перемешивание TempData в ASP.NET Core в MSTest - PullRequest
0 голосов
/ 05 сентября 2018
public ActionResult View(string name)
{
    if (TempData["SessionVariable"] != null)
    {
        FileName = name;  
        return View();
    }
    else
    {  
        return RedirectToAction("index", "Home");
    }

}

TestMethod

public void UseCaseView_CorrectRequirements()
{
    var mock = new Mock<Controller>();
    mock.Setup(p => p.TempData["SessionVariable"]).Returns("admin");
    Controller.View("SAMPLE.xml");           
}

Выдает ошибку, такую ​​как,

Результат StackTrace:

в Moq.Mock.ThrowIfSetupExpressionInvolvesUnsupportedMember (выражение setup, метод MethodInfo) в C: \ projects \ moq4 \ Source \ Mock.cs: строка 883 в Moq.Mock.SetupGetPexProtected [T, TProperty] (выражение Mock 1 mock, Expression 1, условие условия) в C: \ projects \ moq4 \ Source \ Mock.cs: строка 537 в Moq.Mock.SetupGet [T, TProperty] (выражение Mock 1 mock, Expression 1, Условие условия) в C: \ projects \ moq4 \ Source \ Mock.cs: строка 517 в Moq.Mock.SetupPexProtected [Т, TResult] (Тестовая модель 1 mock, Expression 1 выражение, условие условия) в C: \ projects \ moq4 \ Source \ Mock.cs: строка 507 в Moq.Mock.Setup [T, TResult] (Mock 1 mock, Expression 1 выражение, Условие условия) в C: \ projects \ moq4 \ Source \ Mock.cs: строка 484 в Moq.QueryableMockExtensions.FluentMock [T, TResult] (настройка Mock 1 mock, Expression 1) в C: \ projects \ moq4 \ Source \ Linq \ Mocks.cs: строка 224 в lambda_method (закрытие) в Moq.Mock.GetTargetMock (выражение fluentExpression, Mock mock) в C: \ projects \ moq4 \ Source \ Mock.cs: line 856 в Moq.Mock.SetupPexProtected [T, TResult] (выражение Mock 1 mock, Expression 1, условие условия) в C: \ projects \ moq4 \ Source \ Mock.cs: строка 505 в Moq.Mock.Setup [T, TResult] (Mock 1 mock, Expression 1 выражение, Условие условия) в C: \ projects \ moq4 \ Source \ Mock.cs: строка 484 в SE_WEBAPP.Tests.TestControllers.UsecaseControllerTests.UseCaseView_CorrectRequirements () в

D: \ Public \ SE_WEBAPP_TESTCASE \ SE_WEBAPP \ SE_WEBAPP.Tests \ TestControllers \ UsecaseControllerTests.cs: строка 23

Сообщение о результате: метод испытания SE_WEBAPP.Tests.TestControllers.UsecaseControllerTests.UseCaseView_CorrectRequirements сгенерировано исключение: System.NotSupportedException: неверная настройка на не виртуальный (переопределяемый в VB) член: mock => mock.TempData

1 Ответ

0 голосов
/ 05 сентября 2018

В asp.net-core Controller.TempData является публичным свойством, поэтому вы можете легко получить к нему доступ и установить желаемый ключ / значение

public void UseCaseView_CorrectRequirements() {
    // Arrange
    var httpContext = new DefaultHttpContext();
    var tempData = new TempDataDictionary(httpContext, Mock.Of<ITempDataProvider>());
    tempData["SessionVariable"] = "admin";        
    var controller = new UsecaseController() {
        TempData = tempData
    };
    var expected = "SAMPLE.xml";

    //Act
    var view = controller.View(expected) as ViewResult;
    var actual = controller.FileName;

    //Assert
    Assert.AreEqual(expected, actual);
}
...