c# - 如何模拟 OracleConnection 和 OracleCommand?

标签 c# oracle unit-testing moq

对于我的测试,我需要模拟数据客户端,在我的例子中它们是 Oracle。

我已经创建了我的数据访问层以允许传入:

public static Int32? GetUserRoleId(string userName, OracleConnection cn, OracleCommand cmd)

我正在使用 Moq,但如果需要我可以切换到另一个框架,当我像这样创建 Mock 对象时:

Mock<OracleConnection> mockOracleConnection = new Mock<OracleConnection>();
Mock<OracleCommand> mockOracleCommand = new Mock<OracleCommand>();

我收到这个错误:

Failure: System.ArgumentException : Type to mock must be an interface or an abstract or non-sealed class.

结论: 这比我想象的要简单!像这样模拟 DAL 层函数:

mockDao.Setup(a => a.GetUserRoleId(userName, It.IsAny<OracleConnection>(), It.IsAny<OracleCommand>())).Returns(1);

最佳答案

您可以进行更改以使用 IDbConnection 和 IDbCommand(使用接口(interface)并有一个工厂来提供主要代码中的真实对象和测试中的模拟对象——通常使用依赖注入(inject))

Moq 只能模拟接口(interface)和虚拟方法。

关于c# - 如何模拟 OracleConnection 和 OracleCommand?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3728412/

相关文章:

python - Django Formset 缺少管理表单数据

c# - SqlNullValueException : Data is Null on Json call

c# - 来自 REST 的 Xamarin 图像

sql - 保持日期间隔不重叠并与 Oracle +11g 中的触发器一致

sql - 禁用并稍后启用Oracle中的所有表索引

java - 如何使用服务和存储库为 Spring Data 设置单元测试?

c# - 从字节数组中读取行(不将字节数组转换为字符串)

c# - 创建并使用查询中的参数

linux - 解析shell脚本中的参数

javascript - 如何使用 Mocha 测试私有(private)功能?