C# Rhino模拟模拟WindowsImpersonationContext

C# Rhino模拟模拟WindowsImpersonationContext,c#,security,mocking,rhino-mocks,impersonation,C#,Security,Mocking,Rhino Mocks,Impersonation,是否可以使用Rhino mock来模拟WindowsImpersonationContext 我得到: System.MissingMethodException:找不到具有匹配参数的构造函数 ---->System.MissingMethodException:类型“WindowsImpersonationContextProxy04Bee852De914DB5B8A47D6776EDC4CB3”上的构造函数 var windowsImpersonationContext = mockRepo

是否可以使用Rhino mock来模拟WindowsImpersonationContext

我得到:

System.MissingMethodException:找不到具有匹配参数的构造函数 ---->System.MissingMethodException:类型“WindowsImpersonationContextProxy04Bee852De914DB5B8A47D6776EDC4CB3”上的构造函数

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

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


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

您不能Stub/mock WindowsImpersonationContext,因为它是一个具体的类。我不认为您可以自己创建它(对不起,我没有VS handy可供检查),因此我建议更改您的界面,从WindowsImpersonationContext返回您需要的任何内容(可能包装在您自己的类型中),以便您可以模拟它。

Pff,该代码只有3行,并且您的变量名拼写错误。那头犀牛没有被打动。好吧,我已经嘲笑了你的代码。
public interface IImpersonation
{
    WindowsImpersonationContext ImpersonateUser(string sUsername, string sDomain, string sPassword);
}