最初に、タイトルをおaびします。それを説明する最も簡単な方法は考えられませんでした!
ユニットテストを書きたいメソッドがあります。メソッドの実装については説明せず、テストのみを行いたいので、かなり汎用的にしておきます。メソッドは次のとおりです。
public void HandleItem(item a)
{
CreateNewItem();
UpdateStatusOnPreviousItem();
SetNextRunDate();
}
そのため、このクラスにはパブリックメソッドが1つあり、このメソッドがプライベートメソッドを呼び出してロジックを実行します。
それで、ユニットテストを書くとき、私は3つすべてが行われたことをチェックしたいです。それらはすべて同じ実行で呼び出されるため、1つのテストとして実行できると考えました。
public void GivenItem_WhenRun_Thenxxxxx
{
HandleItem(item);
// Assert item has been created
// Assert status has been set on the previous item
// Assert run date has been set
}
しかし、3つの別々のテストとして書くこともできると考えました。
public void GivenItem_WhenRun_ThenItemIsCreated()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenStatusIsUpdatedOnPreviousItem()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenRunDateIsSet()
{
HandleItem(item);
}
したがって、本質的に要件をリストしているのでこれは良いように見えますが、3つすべてが関連しており、テストされたメソッドで実行されるのとまったく同じ作業が必要なので、同じコードを3回実行しています。
これで推奨されるアプローチはありますか?
ありがとう