【问题标题】:AutoFixture for number ranges数字范围的自动夹具
【发布时间】:2017-04-10 05:10:13
【问题描述】:

AutoFixture 有没有简单的方法来做到这一点?

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

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

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

【问题讨论】:

    标签: c# autofixture


    【解决方案1】:

    是的,有:

    // 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);
    }
    

    【讨论】:

    • 我没有得到答案。如果我的理解是正确的,那么该问题要求一种在指定范围内创建值的方法。但答案是检查一个值是否在说明符范围内......
    • 检查是为了让您看看发生了什么,actual 值确实是在指定范围内生成的。
    • 这没有回答问题。相反,它展示了如何使用不同的库来做到这一点。
    • 作为替代方案,您可以使用内置的 Generator&lt;T&gt; 和 LINQ,正如我已回答的 here
    【解决方案2】:

    一次性你可以这样做:

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

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

    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);
    

    【讨论】:

    • 我认为这确实适用于负最小值和最大值,只要最小值
    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2018-01-30
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多