2011-06-15 83 views
1

我有一个符合UIKeyInput协议的UITextView的子类。所以我写了一些逻辑测试。 我没有错误,和所有其他的测试运行良好,但是当myTextView对象应该创建:测试用例在[[MyObject alloc] init]失败

MyTextView *myTextView = [[MyTextView alloc] initWithFrame:frame]; 

停止测试,(像一个破发点)它不会继续

我不知道为什么这是?也许MyTextView的对象不能在逻辑测试中创建?我需要在这里进行应用程序测试吗?如果是这样,那么规则是什么?

ADDED

这是一个测试:(我有一对夫妇以上,但他们都止步于第一行)

- (void)testHasText{ 
    MyTextView *myTextView = [[MyTextView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    [myTextView setText:@"some text"]; 
    STAssertTrue([myTextView hasText], @"hasText failed: It has text!"); 
    [myTextView setText:@""]; 
    STAssertFalse([myTextView hasText], @"hasText failed: It it empty!"); 
    [myTextView release]; 

} 

这是MyTextView实现:

- (BOOL)hasText{ 
    return [[self text] length]>0?YES:NO; 
} 

我已经评论了MyTextView中的其他方法,只留下了三个与UIKeyInput相关的方法。

此外,我还将MyTextView.m添加到LogicTests目标中的编译源列表中。这可能是配置问题,即使我没有得到任何链接器错误或警告?

+1

我想我们需要更多的细节来帮助你。将代码发布到您的子类的initWithFrame方法以及测试用例代码将是一个开始。 – 2011-06-15 07:07:38

+0

UITextView可能是一个类集群,在这种情况下,子类化不起作用。 – EmilioPelaez 2011-06-15 07:28:58

+0

@Emilio你是什么意思的类集群? – nacho4d 2011-06-15 07:30:35

回答

1

逻辑测试,只有在测试运行束是不能使用的UI元素。您需要为此创建一个应用程序测试。

我可以推荐大猩猩逻辑公司的FoneMoneky来执行UI相关测试。它将使您能够在单元测试中测试实际的用户界面。

+0

那么,所有的UIKit子类都必须在应用程序测试中进行测试? – nacho4d 2011-06-15 08:48:45

+0

@ nacho4d一般来说,是的。我认为有一些例外,但现在不记得确切的是哪些。然而,FoneMonkey可以让你做出不露面的UI测试,所以它的部分应用测试部分是核心单元测试。 – 2011-06-15 08:51:49

0

你有一个参考wmTextView,似乎并不存在。那将是我要检查的第一件事。

第二是过去的这个问题:UIKit and unit testing

+0

参考只是一个错字。 :) – nacho4d 2011-06-15 08:28:06