【问题标题】:ViewBag property always returning null in unit testViewBag 属性在单元测试中总是返回 null
【发布时间】:2018-08-24 23:19:22
【问题描述】:

我正在尝试测试 ViewBag 数据是否从我的控制器中填充,但在我的单元测试中,无论我设置什么,我的属性都会返回 null。

控制者:

    public ActionResult Index()
    {
        _logger.LogEvent(LogLevel.Trace, null, $"Landing page requested", null);
        ViewBag.InstrumentationKey = _instrumentationKey;
        return View("Index");
    }

单元测试:

    [TestMethod]
    public void TestIndexHasApplicationInsightsKey()
    {
        // Arrange            
        var mock = new Mock<ILogging>();
        mock.Setup(logging => logging.LogEvent(It.IsAny<LogLevel>(), It.IsAny<Exception>(), It.IsAny<string>(), It.IsAny<object[]>())).Verifiable();
        HomeController controller = new HomeController(mock.Object);

        // Act
        ViewResult result = controller.Index() as ViewResult;

        // Assert
        Assert.AreNotEqual(null, result.ViewBag.InstrumentationKey as string);
    }

结果:

Assert.AreNotEqual 失败。预期任何值,除了:。实际:。

我阅读了一些答案,说我应该访问我的属性视图 ViewData["InstrumentationKey"],但这也总是返回 null。

知道我做错了什么导致我无法测试 ViewBag 属性值吗?

【问题讨论】:

    标签: c# asp.net-mvc unit-testing


    【解决方案1】:

    出于演示目的,测试了以下内容

    [TestClass]
    public class MyViewBagTestClass {
        [TestMethod]
        public void TestIndexHasApplicationInsightsKey() {
            // Arrange            
            HomeController controller = new HomeController();
    
            // Act
            ViewResult result = controller.Index() as ViewResult;
    
            // Assert
            Assert.AreNotEqual(null,result.ViewBag.InstrumentationKey as string);
        }
    }
    
    public class HomeController : Controller {
        public ActionResult Index() {
            ViewBag.InstrumentationKey = "Hello world";
            return View("Index");
        }
    }
    

    证明它在测试时确实有效。它确实如此,因为它在测试时通过了。

    这会让我相信你的测试方法中的_instrumentationKey实际上是null

    我建议您查看填充该变量的时间,确保在执行被测方法期间分配了一个值。

    【讨论】:

    • 我认为你是对的。阅读您的评论后,我意识到他们的 instrumentationkey 是从我的 web.config 文件中的应用程序设置中填充的;我的单元测试配置中不存在该设置。
    猜你喜欢
    • 2020-07-20
    • 1970-01-01
    • 2019-05-27
    • 2017-12-29
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多