Sto leggendo molta documentazione ed esempi su come testare correttamente le cose combinando i tre componenti nel titolo. Ho trovato un metodo di prova per un metodo sulla mia logica aziendale, ma mi sembra molto goffo e sporco.XUnit, AutoFixture e Moq best practice
Vorrei ricevere un feedback da persone più esperte su questo argomento per vedere come posso migliorarlo.
Ecco il codice, segue la spiegazione:
[Fact]
public void ShouldGetItemWithSameId()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var facade = fixture.Freeze<Mock<IDataFacade>>();
facade.Setup(c => c.Get(It.IsAny<int>())).Returns((int i) => new Item { Key = i });
var sut = fixture.Create<BusinessLogic>();
var expected = fixture.Create<int>();
Assert.Equal(expected, sut.Get(expected).Key);
}
La mia classe BusinessLogic
prende un IDataFacade
come parametro del costruttore, che è responsabile nel suo metodo Get(int)
per recuperare la voce con lo stesso ID, roba piuttosto semplice.
Congelando il modello IDataFacade
e l'ho configurato per creare un oggetto che corrisponda all'ID in It.IsAny<int>
. Quindi creo il mio SUT e lo collaudo. Funziona bene.
Mi piacerebbe capire se riesco a migliorare le cose considerando quanto segue:
- devo testare metodi più complessi, come un metodo
Query
che prende una classe che contiene un sacco di proprietà che verrà utilizzato come filtri sulle proprietà corrispondenti sul tipo interrogato. In questo caso non saprei come fare correttamente la parte "Setup" del mock, dal momento che devo inizializzare tutti, o chiudere a tutti, le proprietà del tipo restituito, e in questo scenario non è un singolo Item ma un'intera collezione parte
- Il setup si sente fuori posto, mi piacerebbe essere in grado di riutilizzarla in più metodi
ho alcuni altri test che utilizzano Theory
con AutoMoqData
ma ero in grado di raggiungere questo test (e penso che quelli più complessi) utilizzano quell'approccio, così sono tornato al semplice Fact
con il dispositivo istanziato manualmente.
Qualsiasi aiuto sarà estremamente apprezzato.
Hai considerato (Auto) NSubstitute: ho tenuto duro per troppo tempo sul mio atteggiamento di defilatura di "cosa c'è che non va". http://weareadaptive.com/blog/2014/09/30/why-nsubstitute/ –