2

ローカルのプライベート メソッドを使用して Db からデータを取得するパブリック メソッドがあります。

private string SomeMethod(string) { ... Doing some operations ... string data = GetDBData(string); Doing some operations ... }

モルを使用してプライベート メソッド GetDBData(string) を流用/分離したいので、テストで DB は必要ありません。

明らかに、私の質問は次のとおりです。それを行う方法は? ありがとうウリア

編集
追加情報:

メソッド アクセサーを public と internal protected の両方に変更しようとしましたが、どちらの場合もメソッドがモグラとして表示されるようになりました。しかし、テストを実行すると、元のメソッドがまだ使用されており、PexMethod で実装した迂回は使用されていません。

4

2 に答える 2

2

次のいずれかを試すことができます。

  • メソッドを内部化し、次のような属性をアセンブリに追加します。

    [assembly: InternalsVisibleTo("<corresponding-moles-assembly-name>")]

  • メソッドアクセスを保護された仮想に変更してから、スタブを使用します。

  • クラスをリファクタリングして、コンストラクターパラメーターとしてインターフェイス(IDataAccessObject)を取得します。SomeMethodはそのインターフェイスのメソッドの1つであり、テストメソッドでそのインターフェイスのスタブをクラスに渡します。
于 2011-07-24T21:56:22.160 に答える
1

私はそれを考え出した

プライベート 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"; };
}
  • ラムダが最初のパラメーターとしてインスタンス パラメーターを受け取ることに注意してください。それが何の機能なのかわからない。
于 2011-07-25T13:18:30.897 に答える