2010-10-06 8 views
6

Sto provando a scrivere un test di unità per un codice che crea UIButtons al livello di programmazione, ma quando chiamo questo codice dal test, ottengo un NullReferenceException. Passando attraverso il debugger, sembra che UIButton.FromType() restituisca null.Creazione di componenti dell'interfaccia utente iOS dal codice di prova NUnit

Ecco il metodo che sto testando:

public UIButton makeButton (String title, Action<IWelcomeController> action) 
    { 
     UIButton button = UIButton.FromType (UIButtonType.RoundedRect); 
     // button is null here 
     button.SetTitle(title, UIControlState.Normal); 
     button.TouchUpInside += (sender, e) => { 
      action(controller); 
     }; 
     return button; 
    } 

Ed ecco il metodo di prova:

[Test()] 
    public void TestMakeButtonTitle() 
    { 
     String title = "Elvis"; 
     UIButton button = GetFactory().makeButton(title, delegate(IWelcomeController w) {}); 
     Assert.AreEqual(title, button.Title(UIControlState.Normal)); 
    } 

Sto indovinando c'è qualcosa di magico che devo fare ambiente-saggio al fine di ottenere MonoTouch.UIKit per lavorare al di fuori di una vera applicazione. Qualche suggerimento? (E se non è possibile, suggerito approcci alternativi?)

risposta

1

Piuttosto sicuro a questo punto che il problema fondamentale è che se non si esegue l'iPhone o il simulatore iPhone, non è possibile chiamare le API native necessarie per creare un'istanza dei componenti.

Forse un giorno qualcuno verrà compilato NUnit per MonoTouch e scrivere un test corridore iOS ...

0

Immagino che tu abbia aggiunto il progetto NUnit alla tua soluzione monotouch e abbia fatto riferimento ai progetti monotouch.

Sembra che non sappia dove sono i file .dll di Monotouch, quindi aggiungili come riferimento al tuo NUnit. Questi possono essere trovati a:

~/Developer/Monotouch/usr/lib/mono/<version> 

Questo dovrebbe risolvere il tuo problema.

+0

Se così fosse, mi aspetterei che il codice non venga compilato o che esploda quando provo a caricare la classe UIButton o chiamare FromType(). Non mi aspetto che la chiamata a FromType() abbia esito positivo, ma restituire null. –

0

Forse un giorno qualcuno verrà compilato NUnit per MonoTouch e scrivere un test corridore iOS ...

Un tale runner per iOS ora esiste e viene fornito con le ultime versioni di MonoTouch 5.1.x (beta).

Problemi correlati