对象未在单元测试中更新

Object Not Updated in Unit Test

我正在尝试使用 Moq 和 xUnit 创建单元测试。操作非常简单:计算日期范围内的天数并更新对象属性。这适用于集成测试,但是对象 属性 在我的单元测试中没有更新

单元测试:

[Fact]
public void Bill_DayCount_IsCorrect()
{
    // Arrange
    Mock<IRepository> mockRepo = new Mock<IRepository>();

    Bill bill = new Bill
    {
        StartDate = DateTime.Parse("2/1/2018"),
        EndDate = DateTime.Parse("3/1/2018"),
    };

    // Act
    mockRepo.Object.GetBillDayCount(bill);

    // Assert
    // Here the bill.DayCount value = 0
    Assert.Equal(28, bill.DayCount);
}

回购中的方法:

public Bill GetBillDayCount(Bill bill)
{
    bill.DayCount = (bill.EndDate - bill.StartDate).Days;
    return bill;
}

您不需要模拟作为测试目标的 class。你可以使用Repository的具体实现。

您只需要模拟目标 class 使用的外部依赖项。

界面

public interface IRepository
{
    Bill GetBillDayCount(Bill bill);
}

Class

public class Repository : IRepository
{
    public Bill GetBillDayCount(Bill bill)
    {
        bill.DayCount = (bill.EndDate - bill.StartDate).Days;
        return bill;
    }
}

测试

[Fact]
public void Bill_DayCount_IsCorrect()
{
    // Arrange
    var repository = new Repository();

    var bill = new Bill
    {
        StartDate = DateTime.Parse("1/1/2018"),
        EndDate = DateTime.Parse("29/1/2018"),
    };

    // Act
    var result = repository.GetBillDayCount(bill);

   // Assert
   Assert.Equal(28, result.DayCount);
}