【问题标题】:Rhino Mocks mocking WindowsImpersonationContextRhino Mocks 嘲笑 WindowsImpersonationContext
【发布时间】:2011-03-21 04:13:18
【问题描述】:

是否可以使用 Rhino Mocks 来模拟 WindowsImpersonationContext?

我明白了:

System.MissingMethodException:找不到具有匹配参数的构造函数 ----> System.MissingMethodException : 'WindowsImpersonationContextProxy04bee852de914d5b8a47d6776edc4cb3' 类型的构造函数

var windowsImpersonationContext = mockRepository.Stub<WindowsImpersonationContext>();
mockImpersonation.Stub(x => x.ImpersonateUser("username", "domain", "password")).Return(windowsImpersonationContext);

这是我需要模拟的代码

public interface IImpersonation
{
    WindowsImpersonationContext ImpersonateUser(string sUsername, string sDomain, string sPassword);
}

【问题讨论】:

  • 噗,那段代码只有 3 行,而且你的变量名拼错了。强大的犀牛不为所动。好的,我已经模拟了你的代码。

标签: c# security mocking rhino-mocks impersonation


【解决方案1】:

您不能存根/模拟 WindowsImpersonationContext,因为它是一个具体的类。我不认为您可以自己创建它(抱歉,我没有方便检查的 VS),所以我建议您更改界面以从 WindowsImpersonationContext 返回您需要的任何内容(可能包含在您自己的类型中),以便您可以嘲笑它。

【讨论】:

    【解决方案2】:

    看起来您想要存根 IImpersonation,而不是 WindowsImpersonationContext。这就是 IImpersonation.ImpersonateUser 返回的内容。

    但是,WindowsImpersonationContext 没有公共构造函数,因此您无法创建模拟构造函数进行测试。您可能想要为 WindowsImpersonationContext 创建一个接口。存根用于测试和生产的接口,创建一个实现接口并将调用委托给真正的 WindowsImpersonationContext 的包装类。

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 2016-10-02
      • 2019-12-20
      相关资源
      最近更新 更多