数字范围的自动修复

Ada*_*tín 7 c# autofixture

有没有一种简单的方法可以使用 AutoFixture 做到这一点?

var myInt = fixture.Create<int>(min, max);
Run Code Online (Sandbox Code Playgroud)

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

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

Nik*_*nis 8

就在这里:

// 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 这并没有回答这个问题。相反,它展示了如何使用不同的库来做到这一点。 (5认同)
  • 我没有得到答案。如果我的理解是正确的,那么该问题要求一种在指定范围内创建值的方法。但答案是关于检查值是否在说明符范围内...... (2认同)

小智 8

作为一次性,你可以这样做:

var value = fixture.Create<int>() % (max - min + 1) + min;
Run Code Online (Sandbox Code Playgroud)

作为一种更可重用的方法,您可以编写如下扩展方法:

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

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

var value = fixture.CreateInt(min, max);
Run Code Online (Sandbox Code Playgroud)

  • 我认为这确实适用于负最小值和最大值,只要最小值 &lt; 最大值。然而,与 AutoFixture 的通常行为相比,一个缺点是不会尝试在连续调用中返回不同的值。 (2认同)