0

次のようなメソッドを持つインターフェイス(と呼ばれるIRepository)があります。

IEnumerable<TEntity> ExecuteStoredProcedure<TEntity>(string functionName, 
                                      params Tuple<string, object>[] parameters);

単体テストを介して呼び出されたときにそのメソッドが返すものを設定しようとしています。このような:

dataAccess = Substitute.For<IRepository>();
dataAccess.ExecuteStoredProcedure<MyCustomReturnType>(null, null)
          .ReturnsForAnyArgs(MyCustomReturnList);

テストを実行すると、次の例外が発生します。

NSubstitute.Exceptions.CouldNotSetReturnException: 戻る呼び出しが見つかりませんでした。

このメッセージは、実際のクラスでこれを実行しようとすることについて警告していますが、それは私には当てはまりません。

私は自分のnullパラメータをより現実的なものに変更しようとしました:

ExecuteStoredProcedure<MyCustomReturnType>("", new Tuple<string, object>[]{null})

しかし、それは役に立ちませんでした...

この代替品で私が間違っていることはありますか?

params(私の推測では、キーワードと関係があると思います。)

4

1 に答える 1

1

したがって、ここでスタック オーバーフローを単純化すると問題が発生する可能性があります。

リストMyCustomReturnListは、実際には静的クラスに保持されたリストでした。戻り値としてリストを渡しても実際にはクラスに影響しないため、(リストを設定する) 静的コンストラクターは呼び出されませんでした。

どういうわけか(詳細はよくわかりません)、まだ設定されていないリストへの「参照」を持つことで、NSubstituteは戻り値を設定できませんでした(おそらく初期化されていないため)。

NSubstitute が改善できた唯一のことは、別のエラー メッセージでした。しかし、エラーは NSubstitute ではなく、私のコードにありました。

于 2013-05-31T17:01:13.433 に答える