如何模拟OracleConnection和OracleCommand?

时间:2010-09-16 15:55:06

标签: 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>();

我收到此错误:

  

失败:System.ArgumentException:类型为mock必须是接口或抽象或非密封类。

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

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

2 个答案:

答案 0 :(得分:12)

您可以进行更改以使用IDbConnection和IDbCommand(使用接口并使用工厂在主代码中提供真实对象并在测试中提供模拟对象 - 通常使用依赖注入)

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

答案 1 :(得分:0)

你正在试图模拟密封的课程:你可以看看here

BTW:作为@Aliostad said,这样的框架 - 我见过的大多数模拟框架 - 都只能模拟Interfaces / Abstract类。