c# - 如何使用 Mock 初始化我的 IDbConnection 和 IConfiguration
问题描述
我正在徘徊如何做到这一点,因为它给了我nullreferenceexception。我的处理程序类上有这个构造函数:
IDbConnection _dbConnection;
Context _context;
SigSettings _settings;
public SignalsHandler(IConfiguration configuration, IDbConnection connection)
{
_dbConnection = connection;
_settings = configuration.GetSection("SigSettings").Get<SigSettings>();
if (_settings == null)
_settings = new SigSettings();
}
我想对这个类进行单元测试来测试我的 crud 方法,但下面的代码不起作用:
private Mock<IConfiguration> _configuration = new Mock<IConfiguration>();
private Mock<IDbConnection> _connection = new Mock<IDbConnection>();
private readonly SignalsHandler _handler;
public SignalsTest()
{
_handler = new SignalsHandler(_configuration.Object, _connection.Object);
}
它给了我这个错误: System.ArgumentNullException: 'Value cannot be null。此行上的 Arg_ParamName_Name':_settings = configuration.GetSection("SigSettings").Get();
有什么帮助吗?
解决方案
_configuration
只是模拟对象,您还需要设置它具有的方法,否则它们将返回null
,因此configuration.GetSection("SigSettings")
将返回null
。
为避免这种情况,您需要编写:
_configuration
.Setup(x => x.GetSection("SigSettings"))
.Returns("some setting");
或更一般地说:
_configuration
.Setup(x => x.GetSection(It.IsAny<string>()))
.Returns("some setting");
更新
由于我没有意识到方法返回一些对象而不是string
,这里是完整的设置。通常,您总是为所有方法调用提供模拟,因此您将无处可去null
:
var configSectionMock = new Mock<IConfigurationSection>();
var configMock = new Mock<IConfiguration>();
configMock
.Setup(x => x.GetSection(It.IsAny<string>()))
.Returns(configSectionMock.Object);
// Instantiate system under test with mocked object.
var sut = new Sut(configMock.Object);
推荐阅读
- numpy - 更改矩阵的轴 - Python(连接)
- vba - 从一列中删除重复的值和单元格
- python - macos 上的顶部对齐 Tkinter 标签
- scala - 加入 spark scala 的更好方法
- node.js - 从使用 await 的代码创建一个 Promise
- debugging - 本地的 u-sql UDF 调试
- javascript - 如何在正在运行的 ajax 调用之间打开 URL/链接并销毁所有正在运行的 ajax 调用?
- python - 在 Python 中替换列表中连续和重复的所有元素
- javascript - 如何使用 XMLHttpRequest javascript 和 PHP 发布 blob 和字符串
- php - 试图只显示表格的最后 4 个结果