我不得不进行修复,第二次删除了代码行。所以我决定为此编写一个单元测试。
其构造函数中的 Class 设置了我要测试的属性。该属性恰好受到保护,因此我无法在单元测试中访问它。
[Test]
public void Constructor_WhenCalled_ThenSomePropertyIsPopulated()
{
var vm= new SomeViewModel();
//line below doesn't compile as SomeProperty is protected
Assert.IsNotNull(vm.SomeProperty);
因此,我决定在我的单元测试文件中扩展该类(它没有被密封)并将受保护的属性公开为公共 getter:
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);
现在我的团队有一个争论,我应该只测试公共接口以及其他东西,这是一个快速而肮脏的黑客攻击。
但是,单元测试的目的之一不是保护代码库免受不必要的更改吗?如果这是完全错误的,还应该做什么?