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