Autofixture.Create<int> return 可以是负值吗?

Can Autofixture.Create<int> return a negative value?

实际上,下面的方法总是return一个正整数:

var fixture = new Fixture();
var someInt = fixture.Create<int>();

有没有可能有一天,特征演化并开始return一个负整数?或者是否有官方原因它实际上 return 始终是正整数
如果不是,是否有隐藏在某处的文档告诉它?

为了继续使用 autofixture,我想知道是否可以预见一些变化。

就数据类型能够支持负数而言,是的。谁知道开发人员可能会对我们施加什么样的疯狂 - 但他们不太可能愿意这样做。

综上所述,可能吗?是的。可能吗?编号

Autofixture 的作者在他的 blog 上对此进行了讨论。此 post 指定 当前实施将始终 return 正数 因为它们通常被视为 "safer",所以我认为这不会近期会有变化。

AutoFixture 的全部意义在于生成匿名测试数据。您要求的整数可以是负数。为了 100% 安全,我不会依赖所有未来实现仅 return 正数的隐含假设。您可以通过提供自定义 SpecimenBuilder 来使其更加明确:

fixture.Customizations.Add(new PositiveIntegerBuilder());

可以找到有关自定义标本生成器的更多信息here

作为用户 prgmtc ,一种选择是通过自定义 ISpecimenBuilder

另一种选择是使用内置的 RandomNumericSequenceGenerator class 来提供自定义范围,如下所示:

[Fact]
public void FixtureCreatesNegativeNumbers()
{
    var fixture = new Fixture();
    fixture.Customizations.Add(
        new RandomNumericSequenceGenerator(-900, -100));

    var i = fixture.Create<int>();
    // Prints -> -711
    var l = fixture.Create<long>();
    // Prints -> 618
    var f = fixture.Create<float>();
    // Prints -> -78.0
}
var i = fixture.Create<uint>();

仅当被测试的原始代码需要一个 uint 类型参数时。

var i = Math.Abs(fixture.Create<int>()) 适合你

回答原问题

  • int 定义可以为负数。
  • fixture.Create,根据定义不应该return负整数。

我认为 AutoFixture 的作者不会轻易改变如此重要的东西。 我会使用 fixture.Create<int>