8
當在後here看,它看起來像我應該能夠創建使用CreateMany()
幾個對象,他們重複使用foreach
過來,然後返回它們作爲一個數組。AutoFixture IEnumerable的<T>行爲與CreateMany()
我看到的是,每次迭代似乎每次都會創建新對象。這是預期的行爲?
實體創建:
public class TestEntity
{
public int Id { get; private set; }
public string SomeString { get; set; }
public void SetId(int value)
{
this.Id = value;
}
}
樣品的Program.cs:
private static int id;
static void Main(string[] args)
{
var fixture = new Fixture();
IEnumerable<TestEntity> testEntities =
fixture.Build<TestEntity>().CreateMany(5);
Output(testEntities);
foreach (var testEntity in testEntities)
{
testEntity.SetId(id++);
Console.WriteLine(
string.Format("CHANGED IN FOREACH:: hash: {0}, id: {1}, string: {2}",
testEntity.GetHashCode(), testEntity.Id, testEntity.SomeString));
}
Output(testEntities);
}
private static void Output(IEnumerable<TestEntity> testEntities)
{
foreach (var testEntity in testEntities)
{
Console.WriteLine(
string.Format("hash: {0}, id: {1}, string: {2}",
testEntity.GetHashCode(), testEntity.Id, testEntity.SomeString));
}
}
我創建了一個問題here(如果這是預期的行爲,或許可以被刪除)。
編輯2011-06-02
爲了得到我所期待的行爲,如果我不想修改AutoFixture行爲,我可以使用擴展方法:
var fixture = new Fixture();
TestEntity[] testEntities = fixture.Build<TestEntity>().CreateMany(5).ToArray();
再次出色的幫助!我已經接受了答案,但是如果你能詳細說明「AutoFixture真的竭盡全力確保你只得到你所要求的東西」,那麼它就是++。也就是說,我可能需要一些關於我所要求的教育! :) – rbellamy 2011-05-31 06:10:36
深層次的解釋需要整個博客文章(它*將*看到未來的一天)。簡短的回答是'IEnumerable'的'合同'只指定了一個迭代器。它與列表不一樣。不穩定的迭代器甚至是發生器也適合這個接口。 –
2011-05-31 07:10:15
因此'收益'行爲? – rbellamy 2011-05-31 09:15:31