Я использую AutoFixture в течение нескольких недель, и мне интересно, лучше ли использовать новый Fixture для каждого объекта, который я хочу создать, или я могу просто повторно использовать приспособление, которое я настроил?AutoFixture и метод Create
Вот несколько разных подходов.
Повторное использование такого же приспособления.
Fixture fixture = new Fixture();
ActionExecutedContext context = fixture.Customize(new CustomActionResult<RedirectResult>("Controller/Action"))
.Customize(new CustomController())
.Customize(new CustomActionExecutedContext())
.Create<ActionExecutedContext>();
ExportModelStateToTempDataAttribute attribute = fixture.Create<ExportModelStateToTempDataAttribute>();
Создание нового прибора для каждого объекта. (не уверен в том, что имеет смысл, потому что я не вижу никаких причин, чтобы сделать это.)
ActionExecutedContext context = new Fixture().Customize(new CustomActionResult<RedirectResult>("Controller/Action"))
.Customize(new CustomController())
.Customize(new CustomActionExecutedContext())
.Create<ActionExecutedContext>();
ExportModelStateToTempDataAttribute attribute = new Fixture().Create<ExportModelStateToTempDataAttribute>();
Создать SUT с новым ключевым словом.
ActionExecutedContext context = new Fixture().Customize(new CustomActionResult<RedirectResult>("Controller/Action"))
.Customize(new CustomController())
.Customize(new CustomActionExecutedContext())
.Create<ActionExecutedContext>();
ExportModelStateToTempDataAttribute attribute = new ExportModelStateToTempDataAttribute();
Вот полный тест.
[Fact]
public void Should_not_set_the_temp_data_when_the_model_is_valid()
{
// Arrange
Fixture fixture = new Fixture();
ActionExecutedContext context = fixture.Customize(new CustomActionResult<RedirectResult>("Controller/Action"))
.Customize(new CustomController())
.Customize(new CustomActionExecutedContext())
.Create<ActionExecutedContext>();
ExportModelStateToTempDataAttribute attribute = new ExportModelStateToTempDataAttribute();
// Act
attribute.OnActionExecuted(context);
// Assert
context.Controller.TempData.Should().HaveCount(0);
}
Спасибо! да, я так и думал. Я уже использую AutoDataAttribute для разных вещей, но мне нравится объявлять большинство вещей внутри метода тестирования. :) –