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

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

有帮助吗?

解决方案

指导方针:不要测试您尚未编写的代码。
您不应该担心 WinAPI 实现无法正常工作(很可能它按预期工作)。您应该关心的是测试“接线”,即如果您的代码进行了正确的 WinAPI 调用。在这种情况下,您所需要做的就是模拟接口,并让模拟框架告诉您是否使用正确的参数进行了调用。如果是的话,你就完成了。

  • 创建IWinAPIFacade(具有相关WinAPI方法)并实现CWinAPIFacade。
  • 编写一个插入 IWinAPIFacade 模拟的测试并验证是否进行了适当的调用
  • 编写一个测试以确保 CWinAPIFacade 被创建并作为默认值插入(正常运行)
  • 实现 CWinAPIFacade,它只是盲目委托给平台调用调用 - 无需自动测试该层。只需进行手动验证即可。希望这不会经常改变,也不会出现任何问题。如果你发现它 将来,用一些测试来限制它。

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top