对象未在单元测试中更新

时间:2018-02-18 19:54:19

标签: c# unit-testing asp.net-core xunit

我正在尝试使用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;
}

1 个答案:

答案 0 :(得分:3)

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

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

<强>接口

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

<强>类

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