我是xUnit.net和AutoFixture的新手。
我目前正在做一个“测试项目”,以便熟悉xUnit.net和Autofixture。有一件小事我不明白。
[Fact]和[Theory, AutoMoqData]之间的区别是什么
你能告诉我下面两段代码是否相等吗?我之所以这样问,是因为这两个测试都成功了,但我想以正确的方式学习它。
[Fact]
public void UpdateVersionWillUpdateCorrectlyInRepository()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var contract = fixture.Create<VersionContract>();
var version = fixture.Create<Version>();
fixture.Freeze<Mock<IContractMapper>>()
.Setup(r => r.Map(contract)).Returns(version);
var repMock = fixture.Freeze<Mock<VersionRepository>>();
var sut = fixture.Create<VersionManagementService>();
sut.UpdateVersion(contract);
repMock.Verify(r => r.UpdateVersion(version));
}和
[Theory, AutoMoqData]
public void UpdateVersionWillUpdateCorrectlyInRepository(
VersionContract contract,
Version version,
[Frozen]Mock<IContractMapper> mapMock,
[Frozen]Mock<VersionRepository> repMock,
VersionManagementService sut)
{
mapMock.Setup(r => r.Map(contract)).Returns(version);
sut.UpdateVersion(contract);
repMock.Verify(r => r.UpdateVersion(version));
}让我认为有区别的是关键字[Fact]和[Theory]。
我假设[Theory]关键字告诉xUnit.net框架所提供的数据来自某个地方,某个地方是Autofixture。而[Fact]没有告诉xUnit任何关于数据来源的信息,我需要手动构建对象。
发布于 2014-03-13 17:01:34
假设您的[AutoMoqData]属性如下所示:
public class AutoMoqDataAttribute : AutoDataAttribute
{
internal AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}然后,是的,,这两个测试是等价的。
[Fact]和[Theory]属性都是由xUnit.net定义的。
xUnit.net测试运行器使用[Fact]属性来标识“正常”单元测试:不接受任何方法参数的测试方法。
另一方面,[Theory]属性要求一个或多个DataAttribute实例为Parameterized Test的方法参数提供值。
xUnit.net本身提供了从DataAttribute派生的各种属性:[InlineData]、[ClassData]、[PropertyData]。
AutoFixture通过提供[AutoData]属性连接到xUnit.net的这个扩展点。它可以用来使测试更具声明性。
https://stackoverflow.com/questions/22373258
复制相似问题