iPhone UnitTesting UITextField值和otest错误133

时间:2009-12-29 19:45:26

标签: iphone objective-c

UITextFields不是LogicTests的一部分,而是ApplicationTest目标的一部分吗?

我有一个工厂类,负责创建和返回(iPhone)UITextField,我正在尝试对其进行单元测试。它是我的逻辑测试目标的一部分,当我尝试构建和运行测试时,我得到一个构建错误:

  

/Developer/Tools/RunPlatformUnitTests.include:451:0   试验台   “/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.2.sdk/   '开发商在/ usr / bin中/ otest'   代码133退出异常(它   可能已经崩溃了。)

在构建窗口中,这指向以下行:“RunPlatformUnitTests.include”

RPUTIFail ${LINENO} "Test rig '${TEST_RIG}' exited abnormally with code ${TEST_RIG_RESULT} (it may have crashed)."

我的单元测试如下:

#import <SenTestingKit/SenTestingKit.h>
#import <UIKit/UIKit.h>

// Test-subject headers.
#import "TextFieldFactory.h"

@interface TextFieldFactoryTests : SenTestCase {    

}
@end

@implementation TextFieldFactoryTests

#pragma mark Test Setup/teardown
- (void) setUp {
    NSLog(@"%@ setUp", self.name);      
}

- (void) tearDown {
    NSLog(@"%@ tearDown", self.name);
}

#pragma mark Tests
- (void) testUITextField_NotASecureField
{
    NSLog(@"%@ start", self.name);   
    UITextField *textField = [TextFieldFactory createTextField:YES];    
    NSLog(@"%@ end", self.name); 
}

我正在尝试测试的课程:

// Header file
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface TextFieldFactory : NSObject {

}

+(UITextField *)createTextField:(BOOL)isSecureField;

@end

// Implementation file
#import "TextFieldFactory.h"

@implementation TextFieldFactory

+(UITextField *)createTextField:(BOOL)isSecureField                   
{
    // x,y,z,w are constants declared else where   
    UITextField *textField = [[[UITextField alloc] 
            initWithFrame:CGRectMake(x, y, z, w)] 
            autorelease];

    // some initialization code

    return textField;   
}

@end

3 个答案:

答案 0 :(得分:1)

这是

的副本

Why does instantiating a UIFont in an iphone unit test cause a crash?

这是回溯:

#0  0x004899d1 in __HALT ()
#1  0x003d576d in _CFRuntimeCreateInstance ()
#2  0x00c57ef0 in GSFontCreateWithName ()
#3  0x03fccc72 in +[UIFont systemFontOfSize:] ()
#4  0x03f80766 in +[UILabel defaultFont] ()
#5  0x03f82ec4 in -[UILabel _commonInit] ()
#6  0x03f80d3a in -[UILabel initWithFrame:] ()
#7  0x03efbde8 in -[UITextField createTextLabelWithTextColor:] ()
#8  0x03f03e1a in -[UITextField initWithFrame:] ()
#9  0x00c52d75 in +[TextFieldFactory createTextField:] (self=0xc5308c, _cmd=0x8400b50, isSecureField=1 '\001') at /Users/dmaclach/Desktop/test/Classes/untitled2.m:19
#10 0x00c52c98 in -[TextFieldFactoryTests testUITextField_NotASecureField] (self=0x2161bf0, _cmd=0xc52dfe) at /Users/dmaclach/Desktop/test/Classes/untitled.m:26
#11 0x0043642d in __invoking___ ()
#12 0x00436301 in -[NSInvocation invoke] ()
#13 0x20104632 in -[SenTestCase invokeTest] ()
#14 0x20104d07 in -[SenTestCase performTest:] ()
...

答案 1 :(得分:0)

显然,您不应该将UITextField包含在逻辑测试中,而是将它们移到应用程序测试中。

答案 2 :(得分:0)

所以我也有同样的问题.....任何解决方案?

我要解决的是创建一个DummyUITextField类并将其注入需要UITextField的类中。 (它就像一个模拟,但模拟会是错误的术语)。

@interface DummyUITextField : UIView {

NSString *text;

}

@property (nonatomic, retain) NSString *text;

@end

然后,您可以向此课程添加所需的任何其他方法。

但是,如果您正在测试的代码创建了自己的UITextField(而不是使用Interface Builder),那么您将不得不寻找另一种解决方案。

由于 戴夫