创建自动生成的整数不起作用

时间:2015-09-15 20:16:17

标签: c# autofixture

根据autofixture cheatsheet,我应该能够以连续的方式自动生成数字(1,2,3等)。

我正在使用最新版本(3.34.0)并使用与备忘单显示完全相同的代码,并且不断获取随机数,而不是1,2,3等。我错过了什么吗?作弊表是否过时了?

我的代码:

NSLog(@"Playing sound with sender tag: %i", [sender tag]);
switch ([sender tag]) {
    case 1:
    {
        [_audioPlayer1 play];
        break;
    }
    case 2:
    {
        [_audioPlayer2 play];
        break;
    }
    default:
    {
        break;
    }
}

修改

谢谢托马斯 - 我在github上添加了一个问题:

https://github.com/AutoFixture/AutoFixture/issues/440

1 个答案:

答案 0 :(得分:5)

在AutoFixture 3中,numbers are created using a random algorithm。但是,可以通过使用Fixture自定义NumericSequenceCustomization实例来重新应用2.x行为:

var fixture = new Fixture();
fixture.Customize(
    new NumericSequenceCustomization());

var i1 = fixture.Create<int>();
var i2 = fixture.Create<int>();
var i3 = fixture.Create<int>();
// Prints -> 1
// Prints -> 2
// Prints -> 3

var l1 = fixture.Create<long>();
var l2 = fixture.Create<long>();
var l3 = fixture.Create<long>();
// Prints -> 4
// Prints -> 5
// Prints -> 6

var f1 = fixture.Create<float>();
var f2 = fixture.Create<float>();
var f3 = fixture.Create<float>();
// Prints -> 7
// Prints -> 8
// Prints -> 9

NumericSequenceCustomization定义为:

internal class NumericSequenceCustomization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        fixture.Customizations.Add(new NumericSequenceGenerator());
    }
}

要创建每种类型唯一的数字,请改用NumericSequencePerTypeCustomization

var fixture = new Fixture();
fixture.Customize(
    new NumericSequencePerTypeCustomization());

var i1 = fixture.Create<int>();
var i2 = fixture.Create<int>();
var i3 = fixture.Create<int>();
// Prints -> 1
// Prints -> 2
// Prints -> 3

var l1 = fixture.Create<long>();
var l2 = fixture.Create<long>();
var l3 = fixture.Create<long>();
// Prints -> 1
// Prints -> 2
// Prints -> 3

var f1 = fixture.Create<float>();
var f2 = fixture.Create<float>();
var f3 = fixture.Create<float>();
// Prints -> 1
// Prints -> 2
// Prints -> 3