实际上,以下方法总是返回一个正整数:
var fixture = new Fixture();
var someInt = fixture.Create<int>();
有一天,该功能是否有可能演变并开始返回负整数?或者是否有官方原因它实际上返回一个总是正整数
如果没有,是否有某些文件隐藏在某处?
为了继续使用自动混合,我想知道是否预见到了一些变化。
答案 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>())
为您工作
回答原始问题
我认为AutoFixture的作者不会轻易改变那么重要的事情。
我会使用fixture.Create<int>
答案 3 :(得分:-2)
只要数据类型能够支持负数,是的。谁知道开发商可能会对我们施加什么样的疯狂 - 但他们不太可能想要这样做。
总之,可能吗?是。可能性有多大?否。