8

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

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

4

2 回答 2

12

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

  • 创建 IWinAPIFacade(使用相关的 WinAPI 方法)并实现 CWinAPIFacade。
  • 编写一个插入模拟 IWinAPIFacade 的测试并验证是否进行了适当的调用
  • 编写测试以确保创建 CWinAPIFacade 并将其作为默认值插入(正常运行)
  • 实现 CWinAPIFacade,它只是对 Platform Invoke 调用进行盲委托——无需自动测试这一层。只需进行手动验证。希望这不会经常改变,并且没有任何问题。如果您发现它将来会发生,请通过一些测试来阻止它。
于 2008-09-10T05:12:00.897 回答
0

我不确定我是否关注您..您不想自己测试 PInvoke(您没有编写它)所以您想测试包装类是否按预期执行,对吗?

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

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

于 2008-09-10T05:14:38.240 回答