单元测试 - 设置模型属性值

时间:2016-02-28 20:55:56

标签: c# unit-testing tdd

我目前正在编写一个失败的单元测试...它说明:failed. Expected:<0>. Actual:<16>.我明白这是因为RateManagement模型未正确设置,但是不确定如何在我的测试中设置这些数据。

  

问题:如何填充RateManagement模型以便我可以正确测试值?

测试失败

[TestMethod]
public void BabysitterBusiness_StartTimeBedTimeAndEndTimeAreRecorded_ReturnsCorrectAmountDue()
{
    // Arrange
    var data = new RateManagement
    {
        TotalBedtimeHours = TimeSpan.FromHours(3),
        TotalHoursBeforeBedtime = TimeSpan.FromHours(2),
        TotalOvertimeHours = TimeSpan.FromHours(4)
    };

    // Act
    var result = _business.CalculatePaymentDue();

    // Assert
    Assert.AreEqual(result, 16M);
}

RateManagement Class

public class RateManagement 
    {
        public TimeSpan TotalBedtimeHours { get; set; }
        public TimeSpan TotalOvertimeHours { get; set; }
        public TimeSpan TotalHoursBeforeBedtime { get; set; }
    }

商务舱

using System;
using System.Globalization;
using BabysitterKata.Models;

namespace BabysitterKata.Business
{
    public class BabysitterBusiness
    {
        private readonly TimeManagement _timeManagement;
        private readonly RateManagement _rateManagement;
        private readonly HourlyRate _hourlyRate = new HourlyRate
        {
            StartingRate = 12M,
            BedtimeRate = 8M,
            OvertimeRate = 16M
        };

        public BabysitterBusiness(TimeManagement timeManagement, RateManagement rateManagement)
        {
            _timeManagement = timeManagement;
            _rateManagement = rateManagement;
        }

        public decimal CalculatePaymentDue()
        {
            // calculate amount due for total hours
            var beforeBedtimeAmountDue = _hourlyRate.StartingRate * _rateManagement.TotalHoursBeforeBedtime.Hours;
            var duringBedtimeAmountDue = _hourlyRate.BedtimeRate * _rateManagement.TotalBedtimeHours.Hours;
            var afterHoursAmountDue = _hourlyRate.OvertimeRate * _rateManagement.TotalOvertimeHours.Hours;

            // rounding up if not at start of hour
            if (_rateManagement.TotalHoursBeforeBedtime.Minutes != 00)
            {
                beforeBedtimeAmountDue += _hourlyRate.StartingRate;
            }

            if (_rateManagement.TotalBedtimeHours.Minutes != 00)
            {
                duringBedtimeAmountDue += _hourlyRate.BedtimeRate;
            }

            if (_rateManagement.TotalOvertimeHours.Minutes != 00)
            {
                afterHoursAmountDue += _hourlyRate.OvertimeRate;
            }

            return beforeBedtimeAmountDue + duringBedtimeAmountDue + afterHoursAmountDue;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。您正在构建数据实例。

将这个以及另外两个类似的实例传递给_business的构造函数。

enabled=0

您的RateManagement和TimeManagement似乎是简单的数据对象,因此无需使用框架或任何东西进行模拟。您可以使用数据传递实际实例。