パブリッククラスモールの「非パブリック」メソッドを転用する方法
-
25-10-2019 - |
質問
ローカルのプライベートメソッドを使用してデータベースからデータを取得するパブリックメソッドがあります。
private string SomeMethod(string)
{
...
Doing some operations
...
string data = GetDBData(string);
Doing some operations
...
}
テストに DB を必要としないように、モールを使用してプライベート メソッド GetDBData(string) を転用/分離したいと考えています。
明らかに、私の質問は次のとおりです。どうやってするの?ありがとうウリア
編集
追加情報:
どちらの場合も、メソッドのアクセサを公共保護と内部保護の両方に変更しようとしました。どちらの場合も、メソッドをモルと見なすことができます。ただし、テストを実行すると、PexMethod に実装した迂回路ではなく、元のメソッドが引き続き使用されます。
解決 2
私はそれを考え出した
プライベート SomeMethod を備えたパブリック MyClass がある場合
public class MyClass
{
private string SomeMethod(string str){}
}
SomeMethod メソッドをモールドしたい場合は、テスト メソッドで AllInstances を使用する必要があります。
[PexMethod]
SomeMethod(string str)
{
MMyClass.AllInstances.SomeMethod = (instance, str) => { return "A return string"; };
}
- ラムダがインスタンス パラメータを最初のパラメータとして受け取ることに注意してください。それが何の機能なのかは分かりません。
他のヒント
次のいずれかを試すことができます。
メソッドを作成します 内部 このような属性をアセンブリに追加します。
[assembly: InternalsVisibleTo("<corresponding-moles-assembly-name>")]
メソッドアクセスを変更します 保護された仮想 そして、スタブを使用します。
- クラスをリファクタリングして、コンストラクターパラメーターとしてインターフェイス(IdataAccessObject)を取得します。ソムメソッドはそのインターフェイスの方法の1つであり、そのインターフェイスのスタブをテスト方法でクラスに渡します。
所属していません StackOverflow