Ho bisogno di avere un utente registrato per ciascuno dei miei test di unità, che mi costringe a fare una chiamata asincrona (il login) nel mio test SetUp
.Setup test asincroni Unit in C#
Non riesco a trovare un modo per farlo funzionare, o ottengo eccezioni del puntatore nullo o firme non valide per l'installazione.
public async void SetUp() {}
Questo rende tutta la mia prova non riuscire con i miei oggetti, probabilmente perché non sono collegato.
public async Task SetUp() {}
fa tutta la mia prova ignorato perché la configurazione ha una firma non valida.
E mi piacerebbe non dover copiare le mie linee X di configurazione in ogni test, poiché sono tutte esattamente uguali e ... ecco a cosa serve l'installazione.
Cosa mi manca? questo sembra un problema banale.
Ecco quello che ho adesso, per il bene di che mostra qualcosa
CreateTicketViewModel _viewModel;
[SetUp()]
public async void SetUp() //I have tried using Task instead of void
{
IUserService userService = Dependency.Instance.Resolve<IUserService>();
await userService.LoginAsync(this.UserName, this.Password);
_viewModel = Dependency.Instance.Resolve<CreateTicketViewModel>();
}
[TearDown()]
public void TearDown()
{
_viewModel = null; // I have tried removing this
}
[Test()]
public void Initialization()
{
// If I put what's in SetUp here and add "async" before void,
// it works just fine
Assert.IsNotNull(_viewModel);
Assert.IsNotNull(_viewModel.Ticket);
}
Ho letto molti post sul blog che non hanno vuoto asincrono in SUT, che non ho, ma nessuno di questi post sul blog parla del test stesso. Ho un problema di progettazione? –
Non è possibile rendere i metodi di test asincroni anziché il metodo di installazione? Oppure potresti persino rendere il metodo SetUp sincrono. L'ex è raccomandato però. –
Un test asincrono con solo asserzioni in esso mostra un avvertimento. Spero di evitarlo, se possibile. –