使用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);

}

但是错误弹出进行嘲讽。有人能指出,如果不是这样的话。我是新手。提前谢谢。

这可能只是一个赋值问题,因为在使用最小起订量时,实际类型的赋值需要来自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,以便更好地了解如何使用该库。

最新更新