2010-10-06 76 views
6

我想为编程创建UIButtons的某些代码编写单元测试,但是当我从测试中调用此代码时,我得到一个NullReferenceException。在调试器中逐步完成,它看起来像UIButton.FromType()返回null。从NUnit测试代码创建iOS UI组件

下面是我测试的方法:

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

而这里的测试方法:

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

我猜有某种魔力,我需要做环境,明智的,以获得MonoTouch.UIKit在真正的应用程序之外工作。任何提示? (如果这是不可能的,建议的替代方法?)

回答

1

很确定在这一点上,根本问题是,如果你没有在iPhone或iPhone模拟器上运行,没有办法调用必要的本地API来实例化组件。

也许有一天,会有人编译NUnit的为MonoTouch的,写的是iOS测试跑步......

0

我打算假设您已经将NUnit项目添加到您的monotouch解决方案并且引用了monotouch项目。

它似乎并不知道Monotouch.dll的位置,因此将它们添加为NUnit的引用。

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

这应该解决您的问题:这些可以在这里找到。

+0

如果是这种情况,我希望代码不要编译,或者在尝试加载UIButton类或调用FromType()时炸掉。我不希望FromType()调用成功,但返回null。 – 2010-10-26 21:07:13

0

也许有一天,会有人编译NUnit的为MonoTouch的,写的是iOS测试跑步......

iOS的runner现在已经存在,它甚至还附带了最新的MonoTouch 5.1.x(beta)版本。