我目前正在使用nunit为以前未经测试的服务器编写集成测试,该服务器是用C#using ApiController和Entity Framework 编写的.大多数测试运行得很好,但我遇到了两个总是导致数据库超时的问题.错误消息看起来像这样:
System.Data.Entity.Infrastructure.DbUpdateException:更新条目时发生错误.有关详细信息,请参阅内部异常
System.Data.Entity.Core.UpdateException:更新条目时发生错误.有关详细信息,请参阅内部异常
System.Data.SqlClient.SqlException:超时已过期.操作完成之前经过的超时时间或服务器没有响应.
System.ComponentModel.Win32Exception:等待操作超时
超时的第一个测试:
[TestCase, WithinTransaction]
public async Task Patch_EditJob_Success()
{
var testJob = Data.SealingJob;
var requestData = new Job()
{
ID = testJob.ID,
Name = "UPDATED"
};
var apiResponse = await _controller.EditJob(testJob.ID, requestData);
Assert.IsInstanceOf<StatusCodeResult>(apiResponse);
Assert.AreEqual("UPDATED", testJob.Name);
}
Run Code Online (Sandbox Code Playgroud)
超时的另一个测试:
[TestCase, WithinTransaction]
public async Task Post_RejectJob_Success()
{
var rejectedJob = Data.SealingJob;
var apiResponse = await _controller.RejectJob(rejectedJob.ID);
Assert.IsInstanceOf<OkResult>(apiResponse);
Assert.IsNull(rejectedJob.Organizations);
Assert.AreEqual(rejectedJob.JobStatus, JobStatus.OnHold);
_fakeEmailSender.Verify(
emailSender => emailSender.SendEmail(rejectedJob.Creator.Email, It.Is<string>(emailBody => emailBody.Contains(rejectedJob.Name)), It.IsAny<string>()),
Times.Once());
}
Run Code Online (Sandbox Code Playgroud)
这些是这些测试使用的控制器方法:超时始终发生在await db.SaveChangesAsync()控制器内的第一次调用中.正在测试的其他控制器方法也可以SaveChangesAsync …
c# nunit unit-testing entity-framework asp.net-apicontroller