NullReferenceException quando si utilizza NUnit

Sto provando a impostare i test unitari per un’applicazione di gioco di carte, ma il mio codice lancia una NullReferenceException: il riferimento all’object non è impostato su un’istanza di un object. Per quanto posso dire che non dovrei ottenere questo errore, ma è così.

Ecco il mio codice:

[TestFixture] public class Tests { CardTable aTable = null; [SetUp] public void setup() { aTable = new CardTable(); } [Test] public void setPlayerGold_setTo0_return0() { //arrange //act aTable.setPlayerGold(0); //assert Assert.AreEqual(0, aTable.playerGold); } } public class CardTable { int playerGold; public CardTable() { playerGold = 0; } public void setPlayerGold(int amount) { if (amount == 0) { playerGold = 0; } else { playerGold += amount; } goldLabel.Text = playerGold + ""; } 

L’eccezione viene generata dalla riga aTable.setup come se una tabella non fosse istanziata, anche se chiaramente era nella [configurazione], e non riesco a capire perché.

Sono in esecuzione Visual C # 2010 Express v10.0.40219.1 SP1Rel con NUnit 2.6.0.12051.

Qualsiasi aiuto sarebbe apprezzato. Grazie!

Avviare NUnit, ma non eseguire i test. In Visual Studio assicurati di avere il progetto che contiene i test di Nunit aperti. Quindi nello studio visivo premi ctrl + alt + p. Questo farà apparire la lista dei processi a cui albind. Scegli il processo nunit-agent.exe. Se è presente più di un processo nunit-agent.exe, è ansible ctrl + per sceglierne tutti. Potrebbe essere necessario selezionare Mostra processi in tutte le sessioni e / o Mostra processi da tutti gli utenti per visualizzare nunit-agent.exe. A questo punto dovresti riuscire a eseguire il debug del test.

Ora puoi impostare un breakpoint alla chiamata del costruttore a CardTable . Mentre scorri il debugger dovresti essere in grado di identificare l’errore di riferimento dell’object null.

Un’alternativa allo scorrere del codice è scegliere nel menu Debug-> Eccezioni … nella finestra di dialogo che mostra la casella di controllo accanto a Common Language Runtime Exceptions . Questo farà sì che il debugger si fermi su qualsiasi execptions gestito o non gestito quando viene lanciato. Ciò elimina la necessità del punto di interruzione, ma se vengono lanciate eccezioni che vengono rilevate, potrebbe essere più problematico rispetto al metodo di breakpoint di cui sopra.

Sembra che il setup sia il tuo problema, e non viene chiamato quando lo vuoi.

Consiglio di fare questo:

 CardTable aTable = new CardTable(); 

In questo modo non sarà mai nullo.

Ho avuto lo stesso problema e ho ripristinato la versione del framework NUnit dalla 3.7.1 alla 3.0.5 e ora tutto funziona senza eccezioni. Forse dovresti tornare a una delle versioni precedenti del framework NUnit.