小编Dav*_*eed的帖子

集成测试会导致实体框架超时

我目前正在使用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

6
推荐指数
1
解决办法
881
查看次数