Tôi muốn tạo danh sách các đối tượng tùy chỉnh sử dụng AutoFixture
. Tôi muốn các đối tượng N
đầu tiên có thuộc tính được đặt thành một giá trị và phần còn lại sẽ được đặt thành giá trị khác (hoặc đơn giản được đặt theo chiến lược mặc định của Fixture
).Làm cách nào để chỉ định thuộc tính cho một mục con trong một danh sách?
Tôi biết rằng tôi có thể sử dụng Fixture.CreateMany<T>.With
, nhưng điều này áp dụng một hàm cho tất cả thành viên của danh sách.
Trong NBuilder
có các phương pháp có tên TheFirst
và TheNext
(trong số những người khác) cung cấp chức năng này. Một ví dụ về việc sử dụng chúng:
Cho một lớp Foo
:
class Foo
{
public string Bar {get; set;}
public int Blub {get; set;}
}
người ta có thể nhanh chóng một loạt các Foo
giống như vậy:
class TestSomethingUsingFoo
{
/// ... set up etc.
[Test]
public static void TestTheFooUser()
{
var foosToSupplyToTheSUT = Builder<Foo>.CreateListOfSize(10)
.TheFirst(5)
.With(foo => foo.Bar = "Baz")
.TheNext(3)
.With(foo => foo.Bar = "Qux")
.All()
.With(foo => foo.Blub = 11)
.Build();
/// ... perform the test on the SUT
}
}
này đưa ra một danh sách các đối tượng thuộc loại Foo
với các thuộc tính sau:
[Object] Foo.Bar Foo.Blub
--------------------------------
0 Baz 10
1 Baz 10
2 Baz 10
3 Baz 10
4 Baz 10
5 Qux 10
6 Qux 10
7 Qux 10
8 Bar9 10
9 Bar10 10
(Các giá trị Bar9
và Bar10
đại diện cho sơ đồ đặt tên mặc định của NBuilder
)
Có cách nào tích hợp để đạt được điều này bằng cách sử dụng AutoFixture
? Hoặc một cách thành ngữ để thiết lập một vật cố để hành xử như thế này?
Lớp học 'Foo' trông như thế nào? –
@MarkSeemann Tôi đã mở rộng ví dụ bằng cách sử dụng 'Foo' để làm cho nó rõ ràng hơn một chút. Nếu bạn có nghĩa là lớp thực tế trong dự án thực tế của tôi mà 'Foo' là một proxy, nó giống nhau: chỉ là một POCO với các trường' string', 'int',' DateTime' có thể đặt/có thể cài đặt. – Peter