gpt4 book ai didi

c# - 是否可以对进行 P/Invoke 调用的类进行单元测试?

转载 作者:太空狗 更新时间:2023-10-29 20:06:47 25 4
gpt4 key购买 nike

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

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

最佳答案

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

  • 创建 IWinAPIFacade(使用相关的 WinAPI 方法)并实现 CWinAPIFacade。
  • 编写一个插入 IWinAPIFacade 模拟的测试,并验证是否进行了适当的调用
  • 编写测试以确保创建 CWinAPIFacade 并将其作为默认值插入(正常运行)
  • 实现 CWinAPIFacade,它只是盲目委托(delegate)平台调用调用 - 无需自动测试该层。只需进行手动验证。希望这不会经常改变并且没有任何中断。如果您以后发现它确实,请通过一些测试来阻止它。

关于c# - 是否可以对进行 P/Invoke 调用的类进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com