【发布时间】:2017-04-10 05:10:13
【问题描述】:
AutoFixture 有没有简单的方法来做到这一点?
var myInt = fixture.Create<int>(min, max);
我想知道 AutoFixture 是否可以做到这一点,或者我是否必须实例化一个随机对象并自己完成工作。
如果这不可能,是否有充分的理由不拥有我在这里缺少的这个功能?
【问题讨论】:
标签: c# autofixture
AutoFixture 有没有简单的方法来做到这一点?
var myInt = fixture.Create<int>(min, max);
我想知道 AutoFixture 是否可以做到这一点,或者我是否必须实例化一个随机对象并自己完成工作。
如果这不可能,是否有充分的理由不拥有我在这里缺少的这个功能?
【问题讨论】:
标签: c# 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);
}
【讨论】:
actual 值确实是在指定范围内生成的。
Generator<T> 和 LINQ,正如我已回答的 here。
一次性你可以这样做:
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);
【讨论】: