对象未在单元测试中更新
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);
}
我正在尝试使用 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);
}