コード行が 2 回目に削除された箇所を修正する必要がありました。そこで、そのためだけに単体テストを作成することにしました。
コンストラクター内のクラスは、テストするプロパティを設定します。このプロパティはたまたま保護されているため、単体テストでアクセスできません。
[Test]
public void Constructor_WhenCalled_ThenSomePropertyIsPopulated()
{
var vm= new SomeViewModel();
//line below doesn't compile as SomeProperty is protected
Assert.IsNotNull(vm.SomeProperty);
そこで、単体テスト ファイルで、そのクラスを拡張し (シールされていませんでした)、保護されたプロパティをパブリック ゲッターとして公開することにしました。
public class SomeViewModelExtended : SomeViewModel
{
public SomeViewModelExtended() : base() { }
public new object SomeProperty
{
get { return base.SomeProperty; }
}
}
//now I can test
[Test]
public void Constructor_WhenCalled_ThenSomePropertyIsPopulated()
{
var vm= new SomeViewModelExtended();
Assert.IsNotNull(vm.SomeProperty);
現在、私のチームには、特にパブリック インターフェイスのみをテストするべきであり、これは完全に手っ取り早く汚いハックであるという議論があります。
しかし、単体テストの目的の 1 つは、不要な変更からコード ベースを保護することではありませんか? これが完全に間違っている場合、他に何をすべきですか?