数字范围的自动夹具

AutoFixture for number ranges

是否有使用 AutoFixture 执行此操作的简单方法?

var myInt = fixture.Create<int>(min, max);

我想知道这是否可以通过 AutoFixture 实现,或者我是否必须实例化一个随机对象并自己完成工作。

如果这不可能,是否有充分的理由不具有我在这里缺少的这个功能?

是的,有:

// Install-Package AutoFixture.Xunit - or -
// Install-Package AutoFixture.Xunit2

using System;
using System.ComponentModel.DataAnnotations;
using Xunit;

[Theory, AutoData]
public void ActualIsInTestRange([Range(99, 111)]int actual)
{
    Assert.InRange(actual, 99, 111);
}

作为 one-off 你可以这样做:

var value = fixture.Create<int>() % (max - min + 1) + min;

作为更 re-usable 的方法,您可以编写如下扩展方法:

public static class FixtureExtensions
{
    public static int CreateInt(this IFixture fixture, int min, int max)
    {
        return fixture.Create<int>() % (max - min + 1) + min;
    }
}

然后可以按如下方式使用:

var value = fixture.CreateInt(min, max);