.NET CORE MVC ViewComponent xUnit Тестирование
Я начал использовать xUnit для примера проекта.NET CORE MVC, и я борюсь с добавлением тестов в ViewComponent
который включает в себя IOptions
а также IHostingEnvironment
, Это простой компонент представления, который возвращает значения из файла appsettings.json, и это само по себе работает без проблем.
appsettings.json Фрагмент:
"Application": {"Name": "My App","Version": "1.0.0","Author": "John Doe", "Description": "Just a template!"}
ViewComponent:
[ViewComponent(Name = "Footer")]
public class FooterViewComponent : ViewComponent
{
private readonly IOptions<AppSettings.Application> _app;
private readonly IHostingEnvironment _env;
public FooterViewComponent(IOptions<AppSettings.Application> app, IHostingEnvironment env)
{
_app = app;
_env = env;
}
public IViewComponentResult Invoke()
{
var vm = new FooterViewModel();
{
vm.AppName = _app.Value.Name;
vm.AppVersion = _app.Value.Version;
vm.AppEnvironment = _env.EnvironmentName;
}
return View(vm);
}
}
Я хотел бы проверить, что тип возвращаемого значения является ViewComponent
результат и модель представления не пуста.
ViewComponent Test:
public class FooterViewComponentTest
{
public class Should
{
[Fact]
public void ReturnViewCompnentWithViewModel()
{
// Arrange
var viewComp = new FooterViewComponent(??????????);
// Act
var result = viewComp ??????????;
// Assert
Assert.IsType<ViewComponentResult>(result);
}
}
}
Я все еще работаю над этим и буду редактировать мои фрагменты с моими выводами. У кого-нибудь есть предложения, и я должен писать тесты в этом формате?
1 ответ
С хорошо известной Moq Framework вы можете писать фиктивные объекты абстракций зависимостей и вставлять их в конструктор компонента следующим образом:
public class FooterViewComponentTest
{
public class Should
{
[Fact]
public void ReturnViewCompnentWithViewModel()
{
// Arrange
var appSettings = new AppSettings.Application();
appSettings.AppName = "app";
appSettings.Version = "1.0";
var optionsMock = new Mock<IOptions<AppSettings.Application>>();
optionsMock.Setup(o => o.Value).Returns(appSettings);
var hostingMock = new Mock<IHostingEnvironment>();
hostingMock.Setup(h => h.Environment).Returns("Test");
var viewComp = new FooterViewComponent(optionsMock.Object, hostingMock.Object);
// Act
var result = viewComp.Invoke();
// Assert
Assert.IsType<ViewComponentResult>(result);
}
}
}
Обратитесь к Moq Quickstart, чтобы получить более полное представление о том, как использовать фреймворк