Tôi đang sử dụng xUnit, SubSpec và FakeItEasy cho các bài kiểm tra đơn vị của mình. Tôi đã cho đến nay đã tạo ra một số xét nghiệm đơn vị tích cực như sau:Cách kiểm tra các trường hợp ngoại lệ được ném bằng xUnit, SubSpec và FakeItEasy
"Given a Options presenter"
.Context(() =>
presenter = new OptionsPresenter(view,
A<IOptionsModel>.Ignored,
service));
"with the Initialize method called to retrieve the option values"
.Do(() =>
presenter.Initialize());
"expect the view not to be null"
.Observation(() =>
Assert.NotNull(view));
"expect the view AutoSave property to be true"
.Observation(() => Assert.True(view.AutoSave));
Nhưng bây giờ tôi muốn viết một số bài kiểm tra đơn vị tiêu cực và kiểm tra xem phương pháp nào đó không được gọi, và một ngoại lệ được ném
ví dụ
"Given a Options presenter"
.Context(() =>
presenter = new OptionsPresenter(view,
A<IOptionsModel>.Ignored,
service));
"with the Save method called to save the option values"
.Do(() =>
presenter.Save());
"expect an ValidationException to be thrown"
.Observation(() =>
// TODO
);
"expect an service.SaveOptions method not to be called"
.Observation(() =>
// TODO
);
Tôi có thể thấy FakeItEasy có phương thức tiện ích mở rộng MustNotHave, và xUnit có phương thức Assert.Throws.
Nhưng làm thế nào để kết hợp tất cả lại với nhau?
Ngoại lệ tôi muốn kiểm tra sẽ xảy ra khi phương thức Lưu được gọi. Vì vậy, tôi đoán tôi nên bọc một phương pháp Assert.Throws xung quanh cuộc gọi phương thức presenter.Save(), nhưng tôi nghĩ phương pháp presenter.Save nên được gọi trong .Do (() => ...
bạn có thể vui lòng tư vấn cho nếu kiểm tra đơn vị của tôi sẽ giống như dưới đây hay cái gì khác?
"Given a Options presenter"
.Context(() =>
presenter = new OptionsPresenter(view,
model,
service));
"expect the Presenter.Save call to throw an Exception"
.Observation(() =>
Assert.Throws<FluentValidation.ValidationException>(() => presenter.Save()));
"expect the Service.SaveOptions method not to be called"
.Observation(() =>
A.CallTo(() => service.SaveOptions(A<IOptionsModel>.Ignored)).MustNotHaveHappened());
rất cám ơn
Không chắc điều này có thể giúp đỡ, nhưng bạn đã kiểm tra tài liệu trên SubSpec ví dụ https://bitbucket.org/johannesrudolph/subspec/src/a35fcc8ae1f6/test/SubSpec.Tests/ContextSetupTeardownBehavior.cs Ngoài ra đây là những Các bài kiểm tra dựa trên BDD/Đặc điểm kỹ thuật không phải là Bài kiểm tra đơn vị. Bạn có thể có được đối tượng tốt hơn nếu bạn bao gồm thẻ BDD. – Spock