【问题标题】:Difference between Fact and Theory? - xUnit.net事实与理论的区别? - xUnit.net
【发布时间】:2014-03-13 08:44:10
【问题描述】:

我是 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 数据的来源,我需要手动构建对象。

【问题讨论】:

  • 简答:事实是一个无参数的理论。

标签: c# xunit.net autofixture


【解决方案1】:

假设您的 [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 的这个扩展点。它可用于使测试更具声明性。

【讨论】:

  • 感谢您的解释!是的,我的 AutoMoqData-Attribute 看起来像你的。顺便说一句:我喜欢你的“.NET 书中的依赖注入”,我的“Testproject”就是建立在它之上的!
  • @BjörnAliGöransson 否,AutoDataAttributeAutoFixture.XUnitAutoFixture.XUnit2 中定义。
  • 只有我觉得条款不清楚吗?他们是Tests,但对我来说FactTheory 非常不同。你可以测试一个理论,但不是一个事实……不知道……语言很难……
  • @Noctis 说实话,我也觉得 facttheory 这两个词有些做作,但这是由 xUnit.net 团队...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 2017-06-27
  • 2019-06-22
  • 1970-01-01
  • 2016-06-27
  • 2014-03-26
  • 1970-01-01
相关资源
最近更新 更多