【问题标题】:Can Autofixture.Create<int> return a negative value?Autofixture.Create<int> 可以返回负值吗?
【发布时间】:2015-07-14 13:08:43
【问题描述】:

其实下面的方法总是返回一个正整数:

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

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

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

【问题讨论】:

    标签: c# .net autofixture


    【解决方案1】:

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

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

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

    更多关于自定义样本构建器的信息可以在here找到。

    【讨论】:

    • 感谢自定义标本生成器的想法。
    【解决方案2】:
    var i = fixture.Create<uint>();
    

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

    var i = Math.Abs(fixture.Create&lt;int&gt;()) 会为你工作

    回答原来的问题

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

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

    【讨论】:

      【解决方案3】:

      作为用户prgmtcpoints 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
      }
      

      【讨论】:

      • 或者var i = -fixture.Create&lt;int&gt;()怎么样?
      • 只有在使用默认生成器生成正整数的数字时才可能起作用。我更喜欢explicit (is better than implicit) 方法。
      • 确实如此,编码员会知道是否是这种情况。与显式或隐式无关。与Python无关。 ;)
      【解决方案4】:

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

      总之,可能吗?是的。可能吗?没有。

      【讨论】:

      • 你的回答对我来说很明显也没有用。我重新提出了这个问题。
      猜你喜欢
      • 2013-08-14
      • 2012-02-23
      • 1970-01-01
      • 2021-09-21
      • 2018-09-05
      • 1970-01-01
      • 2012-02-23
      • 2015-08-01
      • 1970-01-01
      相关资源
      最近更新 更多