【发布时间】:2014-02-15 12:15:04
【问题描述】:
我已经使用 AutoFixture 几个星期了,我想知道是为我想要创建的每个对象使用一个新的 Fixture,还是可以重复使用我自定义的 Fixture?
这里有几种不同的方法。
重复使用相同的夹具。
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);
}
【问题讨论】:
标签: c# unit-testing fixtures autofixture