【问题标题】:CreateMany where only 1 element contains certain valueCreateMany,其中只有 1 个元素包含特定值
【发布时间】:2015-03-26 03:26:22
【问题描述】:

这似乎是我阅读的每篇文档的博客文章中都缺少的东西。

如果集合中只有 1 个元素包含我指定的 Id,我该如何CreateMany<T>

我想把它拉回自定义。

我尝试了很多这样的变体:

public class OrdersCustomizations : ICustomization
{
    public void Customize(IFixture fixture)
    {
        var single = fixture.Build<Order>().With(x => x.Id, 10).Create();

        var many = fixture.Build<Order>().CreateMany().ToList();
        many.Add(single);

        fixture.RepeatCount = 5;
        fixture.AddManyTo<Order>(many);
    }
}

但我想不通。

【问题讨论】:

  • 这个答案涉及到同类型的一般问题stackoverflow.com/a/28362898/126014 它不讨论集合的元素,而是讨论单个对象的元素(字段),而是整体问题,以及解决方案,是一样的。

标签: c# autofixture


【解决方案1】:

你为什么不做以下事情?

var many = fixture.Create<List<Order>>();
many[0].Id = 10;

// Rest of test goes here...

或者,如果您使用 AutoFixture.Xunit 的声明式方法,您可以这样做:

public void MyTest(List<Order> orders)
{
    orders[0].Id = 10;

    // Rest of test goes here...
}

【讨论】:

  • 因为它似乎不适用于自定义。我不想一直配置 1 个或多个元素。示例是我想要一组具有 IsReadOnly 属性为 true 和一些为 false 的值。有些有优先权,有些没有。这在很多地方使用,因此可以跨越 100 次测试。设置这些数据非常繁琐,特别是如果我对大多数数据使用 AF,然后对其他数据使用 adhoc 方法。也坚持使用 nunit。
  • 据我了解您所写的内容,您希望集合的元素具有variety。 AutoFixture 不是已经给你了吗?
  • 在集合中,在自定义中,我不知道该怎么做,似乎没有文档或博客文章有帮助。我在 github 上发帖,他们不明白为什么有人想要修改集合中的元素。如果我可以使用 AF 模拟 5 个对象,修改我需要的一些东西,然后将它们添加回集合中,这样 CreateMany 会返回我定义的列表。
【解决方案2】:
// Configure fixture
var expectedResult = _fixture.Create<List<Order>>();
expectedResult[0].Id = "159";
_fixture.Inject(expectedResult);

// Usage
var actualResult = _fixture.Create<List<Order>>();
Assert.True(actualResult[0].Id == expectedResult[0].Id);

这就是您要搜索的内容!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-02
    • 2016-12-12
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多