我正在尝试测试是否已从控制器填充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失败。预期的任何值,除了:<(null)>。实际:<(空)>。
我读了一些答案,说我应该访问属性视图ViewData [“ InstrumentationKey”],但它也总是返回null。
有什么主意我做错了,不允许我测试ViewBag属性值吗?
答案 0 :(得分: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
。
我建议您检查何时填充该变量,并确保在执行被测方法期间分配了一个值。