私はプログラマーの同僚と、テスト可能なものにするためだけに作業中のコードを変更するのが良いか悪いかについて議論しています(例えば、単体テストを介して)。
私の意見では、オブジェクト指向とソフトウェアエンジニアリングの優れた実践を維持することの範囲内で(「すべてを公開する」などではなく)OKです。
私の同僚の意見は、テスト目的でのみコードを修正するのは間違っているというものです。
単純な例として、一部のコンポーネント(C#で記述された)で使用される次のコードを考えてください。
public void DoSomethingOnAllTypes()
{
var types = Assembly.GetExecutingAssembly().GetTypes();
foreach (var currentType in types)
{
// do something with this type (e.g: read it's attributes, process, etc).
}
}
私は、このコードを修正して、実際の作業を行う別のメソッドを呼び出すことを提案しました。
public void DoSomething(Assembly asm)
{
// not relying on Assembly.GetExecutingAssembly() anymore...
}
このメソッドは、作業するAssemblyオブジェクトを取り込んで、テストを実行するために独自のAssemblyを渡すことを可能にします。私の同僚は、これが良い習慣だとは思いませんでした。
良い一般的な慣行とは何ですか?
Type
、パラメータではなくを使用する必要がありますAssembly
。