簡體   English   中英

單元測試-設置模型屬性值

[英]Unit Testing - Setting Model Property Values

我目前正在編寫單元測試,但失敗了……它指出: failed. Expected:<0>. Actual:<16>. 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);
}

費率管理類

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;
        }
    }
}

您走在正確的軌道上。 您正在構造數據實例。

只需將它和另外2個相似的實例傳遞給_business的構造函數即可。

// Arrange
var data = new RateManagement
{
    TotalBedtimeHours = TimeSpan.FromHours(3),
    TotalHoursBeforeBedtime = TimeSpan.FromHours(2),
    TotalOvertimeHours = TimeSpan.FromHours(4)
};

var timeData = new TimeManagement { // your properties };

// Act
var business = new BabysitterBusiness(timeData, data);
var result = business.CalculatePaymentDue();

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

您的RateManagement和TimeManagement似乎是簡單的數據對象,因此無需使用框架或其他任何東西來模擬它。 您可以將真實實例與數據一起傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM