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>
实际上,下面的方法总是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>