代码之家  ›  专栏  ›  技术社区  ›  Rytmis

是否可以对进行p/invoke调用的类进行单元测试?

  •  7
  • Rytmis  · 技术社区  · 17 年前

    我想将一段使用Windows模拟API的代码打包到一个整洁的小助手类中,和往常一样,我正在寻找一种先测试的方法。但是,虽然WindowsIdentity是托管类,但作为另一个用户实际执行登录所需的LogonUser调用是advapi32.dll中的非托管函数。

    我想我可以通过为助手类引入一个接口来解决这个问题,以便在实现中使用和隐藏P/Invoke调用,但是测试该实现仍然是一个问题。您可以想象,实际上在测试中执行模拟可能有点问题,因为用户实际上需要存在于系统中。

    2 回复  |  直到 17 年前
        1
  •  12
  •   Gishu    17 年前

    准则:不要测试尚未编写的代码。
    您不应该担心WinAPI实现不工作(很可能它按预期工作)。 您的问题应该是测试“连线”,即,如果您的代码进行了正确的winapi调用。在这种情况下,您只需要模拟出接口,让模拟框架告诉您调用的参数是否正确。如果是,你就完了。

    • 创建iwinapifacade(使用相关的winapi方法)并实现cwinapifacade。
    • 编写一个测试,插入IwinapiFacade的模拟,并验证是否进行了适当的调用。
    • 编写一个测试,以确保创建cwinapifacade并将其作为默认值插入(正常工作时)
    • 实现cwinapifacade,它只是让委托看不到平台调用调用——不需要自动测试这个层。只需手动验证即可。希望这不会经常改变,不会有任何中断。如果你发现了 在将来,用一些测试来阻挡它。
        2
  •  0
  •   Rob Cooper    17 年前

    我不确定我是否会跟着你……您不想自己测试pinvoke(您没有编写它),所以您想测试包装器类是否按预期执行,对吗?

    那么,只需在包装类中创建接口并针对它进行测试?

    在需要设置用户等方面,我认为这将是一个子弹你需要咬。模仿包装器pinvoke调用似乎很奇怪,因为您只需确认并存在接口:)