Tôi đang tìm cách tùy chỉnh hành vi thời gian tạo của AutoFixture sao cho tôi có thể thiết lập một số đối tượng phụ thuộc sau khi các thuộc tính của lịch thi đấu đã được tạo và gán.AutoFixture có thể thực hiện một đại biểu tại thời điểm tạo đối tượng không?
Ví dụ, giả sử tôi có một phương pháp mà tùy một User
vì sở hữu IsDeleted
của nó luôn luôn phải là sai lầm cho một tập hợp một số bài kiểm tra:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsDeleted { get; set; }
}
public static ObjectBuilder<User> BuildUser(this Fixture f)
{
return f.Build<User>().With(u => u.IsDeleted, false);
}
(Tôi tay một ObjectBuilder
trở về thử nghiệm nên nó Tôi có thể tùy chỉnh thêm nếu cần.)
Điều tôi muốn làm là tự động liên kết người dùng đó với bộ sưu tập ẩn danh theo số Id
vào thời điểm tạo, nhưng tôi không thể thực hiện việc này vì Id
chưa được tạo ra bởi thời gian tôi tay giá trị trả lại cho phép kiểm thử đơn vị đúng. Dưới đây là loại điều tôi đang cố gắng làm:
public static ObjectBuilder<User> BuildUserIn(this Fixture f, UserCollection uc)
{
return f.Build<User>()
.With(u => u.IsDeleted, false);
.AfterCreation(u =>
{
var relation = f.Build<UserCollectionMembership>()
.With(ucm => ucm.UserCollectionId, uc.Id)
.With(ucm => ucm.UserId, u.Id)
.CreateAnonymous();
Repository.Install(relation);
}
}
Có phải như thế này có thể không? Hoặc có lẽ có một cách tốt hơn để hoàn thành mục tiêu của tôi là tạo ra một đồ thị đối tượng ẩn danh?
Bạn có muốn có một trường hợp cụ thể cho loại Người dùng và sử dụng lại giá trị thuộc tính Id của nó ở một nơi khác không? –
Điều này có hữu ích không? http://stackoverflow.com/questions/5398258/customizing-autofixture-builder-with-seeded-property/5398653#5398653 –
@MarkSeemann: 'Do()' có thể thực thi rõ ràng trước khi đối tượng được điền đầy đủ, do đó không ' t làm việc. Tôi có thể (và làm) bằng tay thực hiện lambda ví dụ hoặc làm tùy biến đối tượng của tôi sau khi tạo, nhưng tôi rất thích một thay thế tương tự như trên! – ladenedge