c# - 使用 InMemoryDatabase 返回计数为 0 的 NUnit 测试
问题描述
我正在使用 InMemoryDatabase 实现一些 NUnit 测试。
当我有测试保存在数据库中时,该测试已经通过,但是如果我想在单独的测试方法中返回列表作为结果。该列表是空的,它已返回 0 作为计数,而不是 300。
测试方法GetPaymentCalendar_WithFactoryIdRequest_ReturnCount
失败。
有人可以给我一个提示,我做错了什么?
public class PaymentCalendarRequestServiceTests
{
private IPaymentCalendarService _paymentCalendarService;
private ApplicationDbContext _context;
private IUnitOfWork _unitOfWork;
[SetUp]
public void Init()
{
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
.UseInMemoryDatabase("TestDb")
.Options;
var currentUserServiceMock = new Mock<ICurrentUserService>(MockBehavior.Strict);
currentUserServiceMock.Setup(_ => _.UserId).Returns(Guid.NewGuid().ToString);
var dateTimeServiceMock = new Mock<IDateTimeService>(MockBehavior.Strict);
dateTimeServiceMock.Setup(_ => _.Now).Returns(DateTime.Now);
_context = new ApplicationDbContext(options, currentUserServiceMock.Object, dateTimeServiceMock.Object);
_unitOfWork = new UnitOfWork(_context, dateTimeServiceMock.Object, currentUserServiceMock.Object);
_paymentCalendarService = new PaymentCalendarService(_unitOfWork);
}
[Test]
public void CreatePaymentCalendar_WithValidPaymentCalendarCreateRequest_ReturnSuccess()
{
var request = new List<PaymentCalendarCreateRequest>();
for (int i = 0; i < 25 * 12; i++)
{
request.Add(
new PaymentCalendarCreateRequest
{
Month = DateTime.Now.AddMonths(i).Month,
Year = DateTime.Now.AddMonths(i).Year,
IsClosed = false,
FactoryId = "25aa09a6-006c-4571-ae45-68b697a54fec"
}
);
}
var result = _paymentCalendarService.CreatePaymentCalendar(request).Result;
Assert.IsTrue(result.Succeeded);
}
[Test]
public void GetPaymentCalendar_WithFactoryIdRequest_ReturnCount()
{
var factoryId = "25aa09a6-006c-4571-ae45-68b697a54fec";
var response = _paymentCalendarService.GetPaymentCalendar(factoryId).Result;
Assert.AreEqual(25*12,response.Count);
}
}
解决方案
来自 NUnit 文档:
设置
此属性在 TestFixture 内部使用,以提供一组公共函数,这些函数在调用每个测试方法之前执行。
因此,您的 [SetUp] 中的所有内容都将在每次测试之前完成。
这意味着,您的数据库每次都将使用空方案进行初始化
推荐阅读
- regex - 正则表达式选择所有搜索字符串后,不包括搜索字符串
- javascript - 将对象引用传递给 jQuery 回调
- amazon-web-services - Docker 容器参数连接到 terraform 作业
- reactjs - 请求的项目在 Reactjs 中被隔离
- html - ASP.NET Core 选择标签
- php - 多个 require() 调用 VS 一个更大的文件?
- scala - 从 HDFS 根文件夹读取数据并将其附加到 Spark DF
- ruby-on-rails - 简化将具有最高计数的字典值添加到数组的代码
- java - mongodb查询以在json中查找值
- python - UNC 路径的 Python 和 MySQL 转义序列