私はユニットテストを書くために必要ないくつかのレガシーコードで作業しています。以下の署名を持つデータアクセスメソッドがあります。実装はクラスであり単体テスト - いくつかの難しさを嘲笑
Task ExecuteReaderAsync(string procedureName, Parameters procedureParameters,
params Action<System.Data.IDataReader>[] actions);
私はGetCustomObject
によって返された値を制御することができるさに苦しんだ何この
private async Task<CustomObject> GetCustomObject(int id)
{
CustomObject obj = null;
await db.ExecuteReaderAsync("nameOfProcedure", some parameters,
dr =>
{
obj = new CustomObject()
{
Prop1 = dr["Col1"],
Prop2 = dr["Col2"]
}
}
return obj;
}
テストしています。 ExecuteReaderAsync
が実際に返された場合、私はこのような設定をすることができました。
mockDataAccess.Setup(x => x.ExecuteReaderAsync("nameOfProcedure", It.IsAny<Parameters>()))
.Returns(Task.FromResult(new CustomeObject() { prop1 = "abc", prop2 = "def"};));
しかし、値を指定するロジックは、私が制御しないAction<IDataReader>
です。 つまり、GetCustomObject
によって返されたオブジェクトの値を制御するために私が欲しいことをするために使うことができるトリックがあるかどうかは疑問です。
ありがとう、それは仕事をする – user48408