使用setter中的代码进行单元测试属性的最佳实践是什么?

时间:2010-04-26 19:38:51

标签: unit-testing properties

我对单元测试很新,我们实际上是在尝试在项目中使用它。有这样的房产。

    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中的代码?我是否将其分解为方法?如果我这样做可能是私人的,因为没有其他人需要使用它。但他们说不要测试私人方法。如果这是唯一的案例,请上课吗?这个代码的两次使用会使一个类值得吗?从设计的角度来看,这段代码有什么问题。什么是正确的?

1 个答案:

答案 0 :(得分:4)

你的方式很好(调用setter然后检查get返回预期的值)。

确保选择一系列测试值来运行该设置器中的所有路径。单个set / get测试的覆盖范围不足。