【问题标题】:How to unit test administrator-only functionality?如何对仅限管理员的功能进行单元测试?
【发布时间】:2011-10-11 03:30:12
【问题描述】:

我的应用程序的设计是首先运行标准用户操作(即使用户无法继续,也会产生感兴趣的信息),然后可选地提供相应地进行一些系统更改,这需要提升。如果用户选择继续,程序会重新运行自身,需要使用命令行开关进行提升,告诉它在工作流中的哪个位置恢复。然后,新进程会从旧进程中断的地方重新开始,并进行用户请求的更改。

我的问题是我不知道如何针对库方法编写单元测试,这些库方法必须进行特权调用,而无需以管理员身份运行所有 Visual Studio。我真的很想避免这样做,所以我对系统提示我输入凭据以运行我的部分或全部单元测试感到满意。但目前作为标准用户,调用会因为“System.Management.ManagementException: Access denied”异常而失败。

除了为会话提升整个 Visual Studio 之外,有任何处理此问题的想法或经验吗?由于我使用的是内置单元测试,理想情况下,该解决方案仍会在测试结果窗口中显示每个测试的结果,但这不是必需的。

【问题讨论】:

    标签: visual-studio-2010 security unit-testing mstest


    【解决方案1】:

    我不确定您在做什么需要管理员权限,但我建议在单元测试中您实际上不应该调用这些方法,而是模拟调用这些方法的类。

    通过这种方式,您可以确保使用正确的参数进行正确的调用,但您不会更改系统的状态。

    【讨论】:

    • 我接受这个答案,因为它是正确的,但是关于我的集成测试我仍然有同样的问题。在对系统进行更改之前,我正在创建一个系统还原点以在发生灾难时回滚。
    【解决方案2】:

    您可以使用 LogonUser() 模拟管理员帐户。

    看看这个blog that’s trying to solve your problem

    我喜欢这个 codeproject implementation 更好地调用 LogonUser。如果您稍微搜索一下,实际上有很多 LogonUser() 的代码项目示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 2022-11-29
      • 1970-01-01
      • 2018-02-25
      • 2011-09-16
      相关资源
      最近更新 更多