Tôi thực sự đánh giá cao sức mạnh của AutoFixture kết hợp với các lý thuyết của XUnit. Gần đây tôi đã thông qua việc sử dụng encapsulating customizations và cung cấp cho họ các bài kiểm tra của tôi thông qua một thuộc tính.Làm thế nào tôi có thể sửa đổi các vật cố định thuộc tính dữ liệu lý thuyết tùy chỉnh của tôi tạo ra cho AutoFixture?
Trong những trường hợp nhất định, tôi cần một kịch bản một lần để chạy thử nghiệm của mình. Khi tôi sử dụng một AutoDomainDataAttribute, như trên, tôi có thể yêu cầu một IFixture và mong đợi để có được cùng một trường hợp được tạo ra bởi các thuộc tính?
Trong trường hợp của mình, tôi đang sử dụng MultipleCustomization theo mặc định cho các bộ sưu tập, vv Tuy nhiên, trong trường hợp này, tôi chỉ muốn một mục duy nhất được gửi tới hàm tạo SUT của tôi. Vì vậy, tôi đã xác định phương pháp thử nghiệm của mình như vậy:
[Theory, AutoDomainData]
public void SomeTest(IFixture fixture) {
fixture.RepeatCount = 1;
var sut = fixture.CreateAnonymous<Product>();
...
}
Thật không may, tôi nhận được ngoại lệ khi tạo Sản phẩm ẩn danh. Các thử nghiệm khác hoạt động tốt, nếu tôi yêu cầu một Sản phẩm làm tham số phương thức với các thuộc tính đó. Nó chỉ là một vấn đề trong trường hợp cụ thể này, nơi mà tôi hy vọng rằng tham số fixture là một thông số được tạo bởi AutoDomainDataAttribute của tôi.
Nhà xây dựng của sản phẩm mong đợi một IEnumerable thường được điền với 3 mục, do các tùy chỉnh tôi có tại chỗ thông qua AutoDomainData. Hiện tại, DomainCustomization của tôi là một CompositeCustomization được tạo thành từ MultipleCustomization và AutMoqCustomization, theo thứ tự đó.
Ngoại lệ là: "InvalidCastException: Không thể truyền đối tượng thuộc loại 'Castle.Proxies.ObjectProxy' để nhập 'Sản phẩm'."
Cảm ơn bạn, Mark. Tôi ngay lập tức chuyển sang phương pháp kiểm tra bắt buộc sau khi đăng bài ở đây. Nó là tốt đẹp để biết thay thế mặc dù. Cuối cùng, thử nghiệm cụ thể của tôi là đảm bảo rằng loại cuối cùng không thể bị xóa khỏi sản phẩm (phải có ít nhất một sản phẩm). Đây là lần duy nhất tôi cần kiểm soát 'RepeatCount'. Cảm ơn một lần nữa! – ventaur
Bạn không thể loại bỏ 'Danh mục.Đếm() - 1' mục trước tiên như là một phần của thiết lập thử nghiệm của bạn và sau đó thử nghiệm với chỉ một mục còn lại, bạn không thể xóa mục cuối cùng? –
Vâng, tôi cho là vậy. Đôi khi, các lập trình viên của chúng tôi phải chịu đựng những điều phức tạp. :-) – ventaur