Я пытаюсь протестировать контроллер API ASP.NET Core, используя базу данных InMemory вместо сервера SQL. Я также использую NUnit для написания своих тестов. В моем методе SetUp я создаю некоторые данные и добавляю их в свой контекст InMemory, который, кажется, работает нормально, но когда я пытаюсь извлечь данные с помощью моего контроллера, я получаю нулевые значения.
Это часть моего контроллера:
public class PeopleController : ControllerBase
{
private ApplicationDbContext _context;
private IMapper _mapper;
public PeopleController(ApplicationDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
// GET /api/people
[HttpGet]
public IActionResult GetPeople()
{
return Ok(_context.People.ToList().Select(_mapper.Map<Person, PersonDto>));
}
}
А ниже - часть моего тестового класса. Когда я отлаживаю тест, два объекта Person, которые я добавляю в _context, были добавлены правильно, но когда я вызываю _controller.GetPeople()
, два объекта не отображаются, но я получаю нулевое значение. Метод отлично работает "вживую", используя мой SQL Server.
[TestFixture]
class PeopleControllerTests
{
private ApplicationDbContext _context;
private IMapper _mapper;
private PeopleController _controller;
[SetUp]
public void SetUp()
{
_mapper = GenerateConcreteInstance();
var options = new DbContextOptionsBuilder<ApplicationDbContext>().UseInMemoryDatabase(databaseName: "TestDb").Options;
_context = new ApplicationDbContext(options);
_context.People.Add(new Person()
{ Id = 1, Firstname = "XXXXX", Lastname = "XXXXXXX", Email = "XXXX@XXXX.com", City = "XXXXX", DateCreated = DateTime.Now });
_context.People.Add(new Person()
{ Id = 2, Firstname = "YYYYY", Lastname = "YYYYYYY", Email = "YYYY@YYYY.com", City = "YYYYY", DateCreated = DateTime.Now });
_context.SaveChanges();
_controller = new PeopleController(_context, _mapper);
}
[Test]
public void GetAll_WhenCalled_ReturnPeopleInDb()
{
var result = _controller.GetPeople();
var okObjectResult = result as OkObjectResult;
var content = okObjectResult.Value as IEnumerable<Person>;
Assert.IsNotNull(content);
}
private IMapper GenerateConcreteInstance()
{
var config = new AutoMapper.MapperConfiguration(c =>
{
c.AddProfile(new ApplicationProfile());
});
return config.CreateMapper();
}
}
Буду очень признателен за любую помощь, так как я новичок в ASP.NET Core и тестировании в целом!