找不到字段:“ Microsoft.EntityFrameworkCore.Metadata.Internal.EntityMaterializerSource.ThrowReadValueExceptionMethod”

时间:2019-09-04 15:03:02

标签: c# unit-testing asp.net-web-api entity-framework-core asp.net-core-webapi

我正在尝试通过NUnit对WebApi控制器进行集成测试,但出现此错误:

  

未找到字段:“ Microsoft.EntityFrameworkCore.Metadata.Internal.EntityMaterializerSource.ThrowReadValueExceptionMethod”。

当我从实体框架中调用此行时,就会发生错误:

await base.SaveChangesAsync(true, cancellationToken);

“有趣的”部分是,当我直接(在本地主机中)测试api时,只有在从Nunit对其进行测试时,我才没有此错误。

这是我的测试课中的代码:

[Test]
public async Task PutAusschreibungen_WhenCalled_ReturnAddedAusschreibendeStellen()
{
   Guid id = Guid.NewGuid();
   AusschreibungDto ausschreibungDto = new AusschreibungDto
   {
      Id = id,
      Nr = 0,
      Status = "Test",
      Quelle = new QuelleDto
      {
          Id =  Guid.NewGuid(),
          Name = "QuelleTest",
          EingangTyp = EingangTyp.Email
      }
   };
   IActionResult result = await _ausschreibungenController.PostAusschreibung(It.IsAny<string>(), ausschreibungDto);
   Assert.That(result, Is.TypeOf<CreatedAtActionResult>());

}

这是我的控制器中的代码:

        [HttpPost]
        public async Task<IActionResult> PostAusschreibung(string dbType, [FromBody] AusschreibungDto ausschreibungDto)
        {
            //if (!ModelState.IsValid)
            //{
            //    return new BadRequestObjectResult(ModelState);
            //}
            //Not neccesary because ControllerBase makes Validation automatically

            using (IUnitOfWork uow = _uowF(dbType))
            {
                Ausschreibung ausschreibung = _mapper.Map<AusschreibungDto, Ausschreibung>(ausschreibungDto);
                uow.Ausschreibungen.Add(ausschreibung);

                try
                {
                    await uow.CompleteAsync();
                }
                catch (DbUpdateException ex)
                {

                    return StatusCode(500, ex.ToString());
                }

                AusschreibungDto result = _mapper.Map<Ausschreibung, AusschreibungDto>(ausschreibung);
                return CreatedAtAction("GetAusschreibung", new {dbType, nr = result.Nr},
                    "Der Ausschreibung-Einträge wurde erfolgreich in die Datenbank aufgenommen.");
            }
        }

我正在使用AspNet Core 2.1.0和Entity Framework Core 2.1.1

任何帮助将不胜感激!

0 个答案:

没有答案