2010-10-06 9 views
6

Próbuję napisać test jednostkowy dla jakiegoś kodu, który programowo tworzy UIButtons, ale kiedy wywołuję ten kod z testu, otrzymuję NullReferenceException. Przechodząc przez debugger, wygląda na to, że UIButton.FromType() zwraca zero.Tworzenie komponentów interfejsu iOS z kodu testowego NUnit

Oto metoda jestem testowania:

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

A oto metoda badawcza:

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

Zgaduję jest jakaś magia muszę zrobić środowisko mądry w celu uzyskania MonoTouch.UIKit do pracy poza prawdziwą aplikacją. Jakieś wskazówki? (A jeśli nie jest to możliwe, sugerowane alternatywne podejścia?)

Odpowiedz

1

Prawda na tym etapie: podstawowy problem polega na tym, że jeśli nie korzystasz z iPhone'a lub symulatora iPhone'a, nie ma możliwości wywołania niezbędnych macierzystych interfejsów API w celu utworzenia instancji składników.

Może kiedyś ktoś będzie skompilować NUnit dla MonoTouch i napisać testy biegacz iOS ...

0

Zakładam, że dodałeś projekt NUnit do swojego rozwiązania monotouch i miał on odniesienie do projektu (ów) Monotouch.

Wygląda na to, że nie wie, gdzie znajdują się pliki .dll Monotouch, więc dodaj je jako odniesienie do NUnit. Można je znaleźć pod adresem:

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

To powinno rozwiązać twój problem.

+0

Gdyby tak było, oczekiwałbym, że kod się nie skompiluje lub nie wysadzi w powietrze, gdy spróbuję wczytać klasę UIButton lub zadzwonię FromType(). Nie oczekuję, że wywołanie FromType() zakończy się powodzeniem, ale zwróci wartość null. –

0

Może kiedyś ktoś będzie skompilować NUnit dla MonoTouch i napisać testy biegacz iOS ...

Takich runner dla iOS już istnieje, a nawet jest dostarczane z najnowszymi wersjami MonoTouch 5.1.x (beta).

Powiązane problemy