Cześć.
Próbuje napisać unit testa który testuje metodę Create (asp-core). Podczas wykonywania leci wyjątek, nie wiem czemu Automapper nie zaskakuje w unit teście, tą samą konfiguracje mam w aplikacji i działa.
Missing type map configuration or unsupported mapping.
Mapping types:
Note -> NoteDto
ToDoWebApi.Models.Note -> ToDoWebApi.Models.NoteDto
Unit Test
[Fact]
public void AddToDo()
{
Mapper.Initialize(cfg => cfg.CreateMap<Note, NoteDto>());
Mapper.Initialize(cfg => cfg.CreateMap<NoteDto, Note>());
var mockDb = new Mock<ApplicationDbContext>();
mockDb.Setup(m => m.Notes.Add(It.IsAny<Note>()));
mockDb.Setup(m => m.SaveChanges()).Returns(1);
var repo = new ToDoRepository(mockDb.Object);
NoteDto noteDto = new NoteDto()
{
Text = "Text 1",
Title = "Title 1"
};
var note = repo.Create(noteDto);
if (note == null)
{
throw new System.Exception("Note cannot be null");
}
var noteDtoReturned = Mapper.Map<Note,NoteDto>(note);
mockDb.Verify(m => m.Add(It.IsAny<Note>()), Times.Once());
mockDb.Verify(m => m.SaveChanges(), Times.Once());
Assert.Equal<NoteDto>(noteDto, noteDtoReturned);
}
public class ToDoRepository : IToDoRepository
{
private readonly ApplicationDbContext _db;
public ToDoRepository(ApplicationDbContext db)
{
_db = db;
}
public Note Create(NoteDto noteDto)
{
Note note = Mapper.Map<Note>(noteDto);//powoduje wyjątek
try
{
_db.Notes.Add(note);
var result = _db.SaveChanges();
if (result > 0)
{
return note;
}
}
catch (Exception)
{ }
return null;
}
[...]
}
public class Note
{
[Key]
public Guid Id { get; set; }
[MinLength(1)]
[MaxLength(64)]
public string Title { get; set; }
[MinLength(1)]
[MaxLength(1024)]
public string Text { get; set; }
}
public class NoteDto
{
public string Title { get; set; }
public string Text { get; set; }
}