我对单元测试很新,我们实际上是在尝试在项目中使用它。有这样的房产。
public TimeSpan CountDown
{
get
{
return _countDown;
}
set
{
long fraction = value.Ticks % 10000000;
value -= TimeSpan.FromTicks(fraction);
if(fraction > 5000000)
value += TimeSpan.FromSeconds(1);
if(_countDown != value)
{
_countDown = value;
NotifyChanged("CountDown");
}
}
}
我的测试看起来像这样。
[TestMethod]
public void CountDownTest_GetSet_PropChangedShouldFire()
{
ManualRafflePresenter target = new ManualRafflePresenter();
bool fired = false;
string name = null;
target.PropertyChanged += new PropertyChangedEventHandler((o, a) =>
{
fired = true;
name = a.PropertyName;
});
TimeSpan expected = new TimeSpan(0, 1, 25);
TimeSpan actual;
target.CountDown = expected;
actual = target.CountDown;
Assert.AreEqual(expected, actual);
Assert.IsTrue(fired);
Assert.AreEqual("CountDown", name);
}
问题是如何测试setter中的代码?我是否将其分解为方法?如果我这样做可能是私人的,因为没有其他人需要使用它。但他们说不要测试私人方法。如果这是唯一的案例,请上课吗?这个代码的两次使用会使一个类值得吗?从设计的角度来看,这段代码有什么问题。什么是正确的?
答案 0 :(得分:4)
你的方式很好(调用setter然后检查get返回预期的值)。
确保选择一系列测试值来运行该设置器中的所有路径。单个set / get测试的覆盖范围不足。