单元测试-具有SetOwinContext的Moq抽象类

本文关键字:Moq 抽象类 SetOwinContext -具 单元测试 | 更新日期: 2023-09-27 17:58:53

我正在尝试Moq来测试abstract class method

var mock = new Mock<BaseStudentController>();
mock.CallBase = true;
var ta = mock.Object;
var result = await ta.ActivateStudent"User1@test.com", true);

这成功地模拟了基类,并命中了我的抽象类中的方法。

问题:

然而,我的抽象类也期望Request.GetOwinContext。我不知道我如何才能把它和我的上述要求结合起来。

单元测试-具有SetOwinContext的Moq抽象类

您应该在调用ActivateStudent 之前设置ControllerContext

ta.ControllerContext = new HttpControllerContext { Request = new HttpRequestMessage() };
ta.Request.SetOwinContext( /* mock IOwinContext here */);

示例owin上下文模拟:

var owinMock = new Mock<IOwinContext>();
owinMock.Setup(o => o.Authentication.User).Returns(new ClaimsPrincipal());
owinMock.Setup(o => o.Environment).Returns(new Dictionary<string, object> { {"key1", 123} });
var traceMock = new Mock<TextWriter>();
owinMock.Setup(o => o.TraceOutput).Returns(traceMock.Object);