Я новичок в Asp.net 5 и задаю вопрос об модульном тесте.Единичный тест для Asp.Net 5 MVC без запуска Startup.cs
Класс Я собираюсь проверить как следовать
public class TargetController : Controller
{
private readonly ITargetRepository _targetRepository;
public TargetController(ITargetRepository targetRepository)
{
this._targetRepository = targetRepository;
}
// GET: /<controller>/
public IActionResult Index()
{
return this.View("Index");
}
}
где TargetRepository является
public class TargetRepository : ITargetRepository
{
private readonly TargetContext _context;
public TargetRepository(TargetContext context)
{
this._context = context;
}
}
и TargetContext является
public class TargetContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string connectionString = Startup.Configuration["Data:TargetContextConnection"];
optionsBuilder.UseSqlServer(connectionString);
base.OnConfiguring(optionsBuilder);
}
}
Тест код
public class TargetControllerTests
{
private readonly TargetController _controller;
public TargetControllerTests()
{
this._controller = new TargetController(new TargetRepository(new TargetContext()));
}
[Fact()]
public void IndexActionResultTest()
{
ViewResult vr = this._controller.Index() as ViewResult;
Assert.NotNull(vr);
Assert.Equal("Index", vr.ViewName);
}
}
Проблема заключается в следующем. В TargetContext я использовал
Startup.Configuration["Data:TargetContextConnection"]
, чтобы получить строку подключения к базе данных, которая определена в файле Startup.cs. Поскольку я просто тестировал функцию Index в TargetController, я не запускал Startup.cs. В результате я получил NULLException для Startup.Configuration. Мне интересно, как я могу решить эту проблему и запустить мой модульный тест.
спасибо.
Вы должны издеваться свой контекст базы данных, а также. Единичный тест никогда не должен использовать «реальные» данные из базы данных. –
Спасибо, Стивен. Затем я думаю, что мне нужно создать строку подключения для моего теста, а не использовать конфигурацию в моем целевом проекте. – Ben
Какую насмешливую структуру вы используете? –