2010-10-06 4 views
6

Ich versuche, einen Komponententest für Code zu schreiben, der programmatisch UIButtons erstellt, aber wenn ich diesen Code aus dem Test aufrufen, erhalte ich eine NullReferenceException. Beim Durchgehen im Debugger sieht es so aus, als ob UIButton.FromType() null zurückgibt.Erstellen von iOS-UI-Komponenten von NUnit-Testcode

Hier ist die Methode Ich teste:

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; 
    } 

Und hier ist die Testmethode:

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

Ich vermute, einige magische ich es brauchen umwelt klug, um zu tun, um MonoTouch.UIKann außerhalb einer realen Anwendung arbeiten. Irgendwelche Hinweise? (Und wenn es nicht möglich ist, vorgeschlagene alternative Ansätze?)

Antwort

1

Ziemlich sicher an dieser Stelle, dass das grundlegende Problem ist, wenn Sie nicht auf dem iPhone oder im iPhone-Simulator ausgeführt werden, gibt es keine Möglichkeit, die erforderlichen nativen APIs zum Instanziieren der Komponenten aufzurufen.

Vielleicht eines Tages wird jemand NUnit für Monotouch kompilieren und ein iOS-Testrunner schreiben ...

0

Ich gehe davon aus, dass Sie das NUnit-Projekt zu Ihrer Monotouch-Lösung hinzugefügt haben und es auf die Monotouch-Projekte verweisen.

Es scheint, dass es nicht weiß, wo die Monotouch-DLLs sind, also fügen Sie sie als Referenz zu Ihrer NUnit hinzu. Diese finden Sie unter:

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

Das sollte Ihr Problem lösen.

+0

Wenn dies der Fall wäre, würde ich erwarten, dass der Code nicht kompilieren oder explodieren, wenn ich versuche, die UIButton-Klasse zu laden, oder FromType() aufrufen. Ich würde nicht erwarten, dass der Aufruf von FromType() erfolgreich ist, aber null zurückgibt. –

0

Vielleicht eines Tages wird jemand NUnit für Monotouch kompilieren und ein iOS-Testrunner schreiben ...

Solch ein runner für iOS existiert jetzt und es wird sogar mit den neuesten MonoTouch 5.1.x (Beta) Versionen ausgeliefert.