对于我的测试,我需要模拟数据客户端,在我的例子中它们是 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/