これについてはあまり情報が見つからないようですので、ここで取り上げることにしました。私がよく遭遇する問題の 1 つは、リストの処理中に単一のオブジェクトを作成するユニット テストです。たとえば、 のようなメソッド シグネチャがありIEnumerable<Output> Process(IEnumerable<Input> inputs)
ます。単一の入力を単体テストするときは、1 つの入力のリストを作成し、単純First()
に結果を呼び出して、それが期待どおりであることを確認します。これにより、次のような結果が得られます。
public class BatchCreator
{
public IEnumerable<Output> Create(IEnumerable<Input> inputs)
{
foreach (var input in inputs)
{
Console.WriteLine("Creating Output...");
yield return new Output();
}
}
}
私の現在の考えでは、1 つのクラスがオブジェクトの作成を担当し、別のクラスが入力リストの調整を担当する必要があります。以下の例を参照してください。
public interface ICreator<in TInput, out TReturn>
{
TReturn Create(TInput input);
}
public class SingleCreator : ICreator<Input, Output>
{
public Output Create(Input input)
{
Console.WriteLine("Creating Output...");
return new Output();
}
}
public class CompositeCreator : ICreator<IEnumerable<Input>, IEnumerable<Output>>
{
private readonly ICreator<Input, Output> _singleCreator;
public CompositeCreator(ICreator<Input, Output> singleCreator)
{
_singleCreator = singleCreator;
}
public IEnumerable<Output> Create(IEnumerable<Input> inputs)
{
return inputs.Select(input => _singleCreator.Create(input));
}
}
Output
上に投稿された内容を使用して、指定された の1 つのインスタンスを作成できることを簡単にテストできますInput
。SingleCreator
from 以外のコード ベース内の他の場所を呼び出す必要がないことに注意してくださいCompositeCreator
。作成ICreator
すると、現在のプロジェクトで現在2〜3回行っている同様のタスクを実行する必要がある他の時間に再利用するという利点も得られます
これについて何か光を当てることができる経験がある人はいますか? 私は単にこれを考えすぎていますか?提案は大歓迎です。