Autofixture.Create <int>可以返回负值吗?

时间:2015-07-14 13:08:44

标签: c# .net autofixture

实际上,以下方法总是返回一个正整数:

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

有一天,该功能是否有可能演变并开始返回负整数?或者是否有官方原因它实际上返回一个总是正整数
如果没有,是否有某些文件隐藏在某处?

为了继续使用自动混合,我想知道是否预见到了一些变化。

4 个答案:

答案 0 :(得分:8)

作为用户prgmtc points out,一个选项是通过自定义ISpecimenBuilder

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

[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
}

答案 1 :(得分:7)

Autofixture的作者在blog上讨论了这个问题。这篇文章指出当前实现将总是返回正数,因为它们被认为总体上更“安全”,所以我认为这不会在不久的将来发生变化。

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

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

有关自定义标本制作工具的更多信息,请参见here

答案 2 :(得分:0)

var i = fixture.Create<uint>();

只有要测试的原始代码期望使用uint类型参数。

var i = Math.Abs(fixture.Create<int>())为您工作

回答原始问题

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

我认为AutoFixture的作者不会轻易改变那么重要的事情。 我会使用fixture.Create<int>

答案 3 :(得分:-2)

只要数据类型能够支持负数,是的。谁知道开发商可能会对我们施加什么样的疯狂 - 但他们不太可能想要这样做。

总之,可能吗?是。可能性有多大?否。