FrameworksUnit Test Änderungen speichern Fehler
.NETCoreApp 1.1
EF Core 1.1.1
Xunit 2.2.0
Moq 4.7.8
Controller-POST-Methode
_yourRepository
im Controller Konstruktor injiziert wird und ist vom Typ IYourRepository
[HttpPost(Name = "CreateMethod")]
public async Task<IActionResult> CreateMethod([FromBody] ObjectForCreationDto objectDto)
{
if (objectDto== null)
{
return BadRequest();
}
if (!ModelState.IsValid)
{
return BadRequest();
}
await _yourRespository.CreateObject(objectDto);
if (!await _yourRespository.Save())
{
throw new Exception("Creating this object failed on save.");
}
return Ok();
}
Unit Test, dass schlägt fehl
[Fact]
public async Task CreateObject_WhenGoodDtoReceived_SuccessStatusReturned()
{
// Arrange
var mockRepo = new Mock<IYourRepository>();
var controller = new YourController(mockRepo.Object);
var objectForCreationDto = new ObjectForCreationDto { Code = "0001", Name = "Object One" };
// Act
var result = await controller.CreateObject(objectForCreationDto);
// Assert
Assert.IsType<OkObjectResult>(result);
}
Der Test schlägt fehl, weil die Leitung
if (!await _yourRespository.Save())
immer true ergibt. Wenn es um true können Sie sehen, dass der Code einen Fehler wirft (die von Middleware behandelt wird)
_yourRepository.Save() -Methode
public async Task<bool> Save()
{
return (await _yourContext.SaveChangesAsync() >= 0);
}
Ich bin nicht sicher, wie das Problem zu lösen und ich bin mir nicht 100% sicher, warum es scheitert.
Liegt es daran, dass die gespottete IYourRepository
Schnittstelle keine Implementierung der Save
Methode enthält?
Wenn ja, bedeutet das, die Post
Methode zu testen, würde ich meinen DbContext spotten und mein YourRepository
Objekt damit erstellen?
Jede Erklärung, warum dies versagt und wie es zu beheben viel
statt 'erwarten _yourRespository.Save()' 'versuchen _yourRespository.Save(). Warten Sie()' –
Er ist ein Mock verwenden, _yourRepository hat ** keine Funktionalität **. Das ist der springende Punkt eines Spottes, nicht eine konkrete Implementierung zu haben, sondern "gefälschte" Ergebnisse zu haben, die Sie wollen, dass es zurückkommt. – Tseng