Sto usando xUnit, SubSpec e FakeItEasy per i miei test di unità. Ho finora creato alcuni test di unità positivi come il seguente:Come verificare le eccezioni generate usando xUnit, SubSpec e 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));
Ma ora voglio scrivere alcuni test di unità negativi e verificare che certi metodi non vengono chiamati, e viene generata un'eccezione
es.
"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
);
posso vedere FakeItEasy ha un metodo di estensione MustNotHaveHappened e xUnit ha un metodo Assert.Throws.
Ma come faccio a mettere tutto insieme?
L'eccezione che voglio testare deve verificarsi quando viene chiamato il metodo Save. Quindi suppongo che dovrei avvolgere un metodo Assert.Throws attorno alla chiamata del metodo presenter.Save(), ma pensavo che il metodo presenter.Save venisse chiamato nel .Do (() => ...
si può si prega di avvisare se il mio test di unità dovrebbe essere simile al di sotto o qualcos'altro?
"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());
Molte grazie
Non sono sicuro che questo potrebbe aiutare, ma Hai controllato la documentazione sul SubSpec per esempio https://bitbucket.org/johannesrudolph/subspec/src/a35fcc8ae1f6/test/SubSpec.Tests/ContextSetupTeardownBehavior.cs anche questi sono Test basati su BDD/Specifiche non Test unitari. Potresti ottenere un pubblico migliore se includi il tag BDD. – Spock