作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在对一个可以根据对象的属性过滤对象的业务类进行 TDD。过滤规则很多,每个规则通常考虑多个属性。
我开始通过提供所有对象属性的枚举来检查每条规则,但这很快变得无趣,我想在我的大脑被“复制粘贴退化”吞噬之前解决这个问题。
AutoFixture 应该在这种情况下非常有用,但我在 FAQ 或 CheatSheet 中找不到相关信息。 Ploeh 的博客 populated lists看起来很有前途,但对我来说还不够深入。
所以,给定以下类
public class Possibility
{
public int? aValue {get;set;}
public int? anotherValue {get;set;}
}
我能否获得一个Possibility
列表,其中每个类都包含预定义值aValue
和anotherValue
的一个可能枚举?例如,给定值 [null, 10, 20]
for aValue
和 [null, 42]
for anotherValue
,我将返回 6 个 Possibility
实例。
如果不是,除了自己为每种对象类型编写代码之外,我如何才能获得这种行为?
最佳答案
给出问题的值:
null
, 10
, 20
对于 aValue
null
, 42
, --
对于 anotherValue
这是使用 AutoFixture 执行此操作的一种方法,使用 Generator<T>
:
[Fact]
public void CustomizedAutoFixtureTest()
{
var fixture = new Fixture();
fixture.Customizations.Add(
new PossibilityCustomization());
var possibilities =
new Generator<Possibility>(fixture).Take(3);
// 1st iteration
// -------------------
// aValue | null
// anotherValue | null
// 2nd iteration
// -------------------
// aValue | 10
// anotherValue | 42
// 3rd iteration
// -------------------
// aValue | 20
// anotherValue | (Queue is empty, generated by AutoFixture.)
}
内部PossibilityCustomization
使用 Queue提供预定义值的类——当它用完预定义值时,它使用 AutoFixture。
private class PossibilityCustomization : ISpecimenBuilder
{
private readonly Queue<int?> aValues =
new Queue<int?>(new int?[] { null, 10, 20 });
private readonly Queue<int?> anotherValues =
new Queue<int?>(new int?[] { null, 42 });
public object Create(object request, ISpecimenContext context)
{
var pi = request as PropertyInfo;
if (pi != null)
{
if (pi.Name == "aValue" && aValues.Any())
return aValues.Dequeue();
if (pi.Name == "anotherValue" && anotherValues.Any())
return anotherValues.Dequeue();
}
return new NoSpecimen();
}
}
关于c# - Autofixture 能否在给定每个属性的可能值列表的情况下枚举所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25790631/
我是一名优秀的程序员,十分优秀!