Sto usando il Moq per testare l'unità di un codice che include un ciclo Parallel.foreach
.Perché un test di unità .NET copre un loop di Parallel.foreach dipendente dall'hardware?
Il Disponi la fase imposta 4 eccezioni da gettare all'interno del ciclo e quindi avvolto in un AggregateException
.
Questo è passato sul mio processore i7 e ho controllato il codice.
In seguito, un collega si è lamentato che non gli passava accanto. Si è scoperto che lo Parallel.foreach
stava generando solo 2 thread sul suo Core2duo prima di bombardare e quindi solo 2 eccezioni sono state incapsulate nello AggregateException
.
La domanda è cosa fare al riguardo, quindi il test dell'unità non dipende dall'architettura del processore? Un paio di pensieri: -
- C'è un Microsoft article su come aggiungere manualmente le eccezioni al il
AggregateException
ma non siamo interessati a fare questo come il ciclo dovrebbe uscire il più presto possibile, se c'è un problema. ParallelOptions.MaxDegreeOfParallelism
can porre un limite superiore al numero di thread utilizzati. Ma a meno che ciò sia abbassato a 1 (che sembra più imbroglio di prova adeguata unit) come può unit test sapere quanti thread sarà effettivamente utilizzato e quindi impostare il Disporre e asserzione fasi propertly?
Il numero di eccezioni child non è un requisito e non deve essere testato in questo modo. È un dettaglio di implementazione. È possibile verificare 1+ eccezioni del tipo corretto. –
@HenkHolterman Vero ma devo impostare il simulatore in modo appropriato. Stai suggerendo che dovrei impostare il numero massimo di chiamate simulate possibili, ma non asserire che tutte queste sono state effettivamente invocate alla fine? –
Non sono sicuro di quale parte vuoi prendere in giro ma non dovrebbe avere importanza. –