代码之家  ›  专栏  ›  技术社区  ›  Lucas B

如何模拟OracleConnection和OracleCommand?

  •  7
  • Lucas B  · 技术社区  · 14 年前

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

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

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

    我正在使用moq,不过如果需要,我可以切换到另一个框架,当我创建这样的模拟对象时:

    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);
    
    2 回复  |  直到 14 年前
        1
  •  12
  •   Aliostad    14 年前

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

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

        2
  •  0
  •   Community CDub    7 年前

    你在模仿一个封闭的班级:你可以看看 here .

    btw:as@aliostad said 这样的框架——我见过的大多数模拟框架——只能模拟接口/抽象类。