Я действительно застрял и мне нужна ваша помощь.
У меня есть API .NET Core 2.1, и я хочу создать проект nUnitTest (NUnit 3.10.1) для тестирования контроллера API, но Я не знаю, как вызвать метод действия контроллера из nUnitTest, и мне действительно нужна помощь .
Вещи, которые я пробовал:
1) Создать конструктор без параметров в контроллереи создать экземпляр контроллера из метода Test, но это не работает.
2) Создать конструктор в классе Test для определения контекста БД, но это также не работает.
Здесьмой контроллер API:
public class PersonController : ControllerBase
{
private readonly NetCoreAPI1Context _context;
public PersonController(NetCoreAPI1Context context)
{
_context = context;
}
// POST: api/Person
[HttpPost]
public async Task<IActionResult> PostPerson([FromBody] Person person)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_context.Persons.Add(person);
await _context.SaveChangesAsync();
return CreatedAtAction("GetPerson", new { id = person.Id }, person);
}
}
Вот NetCoreAPI1Context
класс
public class NetCoreAPI1Context : DbContext
{
public NetCoreAPI1Context(DbContextOptions<NetCoreAPI1Context> options)
: base(options)
{
}
public DbSet<Person> Persons { get; set; }
}
Вот Person
класс
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
Я подтвердил, что PostPerson
действие в контроллере сработало.
Затем я добавляю в решение проект nUnitTest.
Вот мой простой тестовый класс и метод:
class PersonControllerTest
{
Person _person;
//NetCoreAPI1Context _context;
[SetUp]
public void Setup()
{
_person = new Person
{
FirstName = "David",
LastName = "Johnson",
Email = "dj@dj.com"
};
}
//public PersonControllerTest(NetCoreAPI1Context context)
//{
// _context = context;
//}
[Test]
public void PostPersonTest()
{
var person = _person; // confirm that "person" has data and ready to be used
//
// HOW To CALL THE COTROLLER METHOD PostPerson(...) HERE????
//
}
}