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
答案 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),那么您将不得不寻找另一种解决方案。
由于 戴夫