【问题标题】:How can I mock an OracleConnection and OracleCommand?如何模拟 OracleConnection 和 OracleCommand?
【发布时间】:2011-04-13 07:21:49
【问题描述】:

对于我的测试,我需要模拟数据客户端,在我的例子中它们是 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:要模拟的类型必须是接口或抽象或非密封类。

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

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

【问题讨论】:

    标签: c# oracle unit-testing moq


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您正在尝试模拟一个密封类:您可以查看here

      顺便说一句:正如@Aliostad said,这样的框架——我也见过的大多数模拟框架——只能模拟接口/抽象类。

      【讨论】:

        猜你喜欢
        • 2014-05-01
        • 1970-01-01
        • 2016-10-10
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多