如何解决将 Moq 与 Xunit 结合使用 - 单元测试 .net 核心 API
我正在尝试对控制器进行单元测试,并创建了一个实现接口的假类。
public class UnitTest1
{
GrantProgramsController _controller;
IBLGrantProgram _grant;
readonly ILogger<GrantProgramsController> _logger;
public UnitTest1()
{
_grant = new BLGrantProgramFake();
_logger = new Logger<GrantProgramsController>(new NullLoggerFactory());
_controller = new GrantProgramsController(_grant,_logger);
}
//tests for get method
[Fact]
public void Get_whencalled_returnsokresult()
{
// Act
var okResult = _controller.GetGrantProgram();
// Assert
Assert.IsType<OkObjectResult>(okResult.Result);
}
----------
但是,我正在尝试使用 Moq 框架并模拟接口,而不是为接口创建虚假实现。
public UnitTest1()
{
// _grant = new BLGrantProgramFake();
_grant = new Mock<BLGrantProgram>();
_logger = new Logger<GrantProgramsController>(new NullLoggerFactory());
_controller = new GrantProgramsController(_grant,_logger);
}
但是会弹出错误以进行模拟。有人可以指出这是否不是这样。我是新手。提前致谢。
解决方法
这可能只是一个赋值问题,因为在使用 MOQ 时,实际类型的赋值需要来自 Mock<T>.Object
属性
public UnitTest1() {
_grant = new Mock<IBLGrantProgram>().Object; //<---
_logger = new Logger<GrantProgramsController>(new NullLoggerFactory());
_controller = new GrantProgramsController(_grant,_logger);
}
如果要配置成员,那么仍然需要 Mock<T>
来设置期望值。
例如
public UnitTest1() {
_grant = new Mock<IBLGrantProgram>().Object; //<--- mock assigned
//extract Mock<T> and setup expectations.
Mock.Get(_grant).Setup(_ => _.SomeMember()).Returns(someValue);
_logger = new Logger<GrantProgramsController>(new NullLoggerFactory());
_controller = new GrantProgramsController(_grant,_logger);
}
我建议您参考 Moq Quickstart 以更好地了解如何使用该库。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。