私は1つのパブリックメソッドと、パブリックメソッドに渡されるパラメータに応じて実行される多くのプライベートメソッドを持つクラスを持っているので、私のコードは次のようになります:
public class SomeComplexClass
{
IRepository _repository;
public SomeComplexClass()
this(new Repository())
{
}
public SomeComplexClass(IRepository repository)
{
_repository = repository;
}
public List<int> SomeComplexCalcualation(int option)
{
var list = new List<int>();
if (option == 1)
list = CalculateOptionOne();
else if (option == 2)
list = CalculateOptionTwo();
else if (option == 3)
list = CalculateOptionThree();
else if (option == 4)
list = CalculateOptionFour();
else if (option == 5)
list = CalculateOptionFive();
return list;
}
private List<int> CalculateOptionOne()
{
// Some calculation
}
private List<int> CalculateOptionTwo()
{
// Some calculation
}
private List<int> CalculateOptionThree()
{
// Some calculation
}
private List<int> CalculateOptionFour()
{
// Some calculation
}
private List<int> CalculateOptionFive()
{
// Some calculation
}
}
このクラスをテストする方法をいくつか考えましたが、どれも複雑すぎるか、必要以上にメソッドを公開しているように見えます。これまでのオプションは次のとおりです。
すべてのプライベート メソッドを internal に設定し、[assembly: InternalsVisibleTo()] を使用します。
すべてのプライベート メソッドを別のクラスに分離し、インターフェイスを作成します。
すべてのメソッドを仮想化し、私のテストでは、このクラスから継承してメソッドをオーバーライドする新しいクラスを作成します。
上記のクラスをテストするための、私がリストしたものよりも優れた他のオプションはありますか?
私がリストしたものの中から 1 つを選ぶとしたら、その理由を説明していただけますか?
ありがとう