gpt4 book ai didi

c# - 使用 InMemory 测试 ASP.NET Core API Controller

转载 作者:行者123 更新时间:2023-11-28 20:48:06 25 4
gpt4 key购买 nike

我正在尝试使用 InMemory 数据库而不是 SQL 服务器来测试 ASP.NET Core API Controller 。我也在使用 NUnit 来编写我的测试。在我的 SetUp 方法中,我创建了一些数据并添加到我的 InMemory 上下文中,这似乎工作正常,但是当我尝试使用我的 Controller 检索数据时,我得到了空值。

这是我的 Controller 的一部分:

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>));
}
}

下面是我的测试课的一部分。当我调试测试时,我添加到 _context 的两个 Person 对象已正确添加,但是当我调用 _controller.GetPeople() 时,这两个对象没有显示,但我返回 null。使用我的 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 和一般测试的新手!

最佳答案

您必须调用:

_context.SaveChanges()

在使用 _context.Add(T) 添加新条目时提交对数据库的更改。

关于c# - 使用 InMemory 测试 ASP.NET Core API Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58418904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com