現在、テスト容易性のためにWindows偽装を実行し、少しのロードブロッキングを実行したコードをリファクタリングしています。これは私がとのトラブルを抱えていたコードのビットです:単体テスト用のオブジェクトのインスタンス化を模擬する
...
if (LogonUserA(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) > 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate))
{
var tempWindowsIdentity = new System.Security.Principal.WindowsIdentity(tokenDuplicate);
var impersonationContext = tempWindowsIdentity.Impersonate();
...
}
...
}
は、どのように私はWindowsIdentityオブジェクトをインスタンス化の動作を模擬しますか?私は、様々な選択肢を考えている:すなわちC++の関数ポインタのようなインスタンスを作成して、インスタンスの作成を処理する委譲でその
- 峠(私は、メソッドのシグネチャは次のようになりますよう、彼らは方法の意図をぼかししまう怖いので)これらの選択肢の
どれも私には特に良いように見えるん:
public bool Impersonate(string user, string password, string domain, Factory factory)
または
public bool Impersonate(string user, string password, string domain, delegate WinIDCreator)
方法の目的は、特定のユーザーを偽装することであるので、ファクトリクラスまたは代理人のいずれかがそれに提供されるべきであることを私には意味がありません。しかし、私が単体テストを実行するたびに新しいWindowsIdentityインスタンスが作成されるという考えが不快なので、この動作を分離して模擬したいと思っています。
アイデアやコメントはありますか?
ありがとうございます。私は、NativeMethodsクラスにログオン項目をカプセル化し、単純にそれらを嘲笑していると付け加えておきます。クラスにファクトリをインジェクトする際の心配は、メソッドのパラメータとして使用することと同じです。クラスにクラスファクトリに依存することは自然ではありません。 – jpoh
ieこのクラスは、それはNativeMethodsクラス(私が必要とするWin APIをカプセル化する)に依存しています。私はそれがFactoryクラスに対する依存性を持つこともOKであることを自分自身に確信させることは難しいと思っています。 – jpoh