我正在尝试通过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
任何帮助将不胜感激!