Tôi hiện đang cố gắng tìm hiểu mục tiêu-c bằng cách sử dụng XCode 3.1. Tôi đã làm việc trên một chương trình nhỏ và quyết định thêm thử nghiệm đơn vị vào nó.Tại sao kiểm tra OCUnit của tôi không thành công với "mã 138"?
Tôi đã làm theo các bước trên trang Nhà phát triển Apple - Automated Unit Testing with Xcode 3 and Objective-C. Khi tôi thêm bài kiểm tra đầu tiên của tôi, nó đã làm việc tốt khi các bài kiểm tra thất bại, nhưng khi tôi sửa chữa các bài kiểm tra xây dựng không thành công. Xcode đã báo cáo lỗi sau:
error: Test host '/Users/joe/Desktop/OCT/build/Debug/OCT.app/Contents/MacOS/OCT' exited abnormally with code 138 (it may have crashed).
Cố gắng cách ly lỗi của mình, tôi đã làm theo các bước từ ví dụ Kiểm tra đơn vị ở trên và ví dụ đã làm việc. Khi tôi thêm một phiên bản đơn giản của mã của tôi và một trường hợp kiểm tra, lỗi được trả lại.
Đây là mã tôi đã tạo:
Card.h
#import <Cocoa/Cocoa.h>
#import "CardConstants.h"
@interface Card : NSObject {
int rank;
int suit;
BOOL wild ;
}
@property int rank;
@property int suit;
@property BOOL wild;
- (id) initByIndex:(int) i;
@end
Card.m
#import "Card.h"
@implementation Card
@synthesize rank;
@synthesize suit;
@synthesize wild;
- (id) init {
if (self = [super init]) {
rank = JOKER;
suit = JOKER;
wild = false;
}
return [self autorelease];
}
- (id) initByIndex:(int) i {
if (self = [super init]) {
if (i > 51 || i < 0) {
rank = suit = JOKER;
} else {
rank = i % 13;
suit = i/13;
}
wild = false;
}
return [self autorelease];
}
- (void) dealloc {
NSLog(@"Deallocing card");
[super dealloc];
}
@end
CardTestCases.h
#import <SenTestingKit/SenTestingKit.h>
@interface CardTestCases : SenTestCase {
}
- (void) testInitByIndex;
@end
CardTestCases.m
#import "CardTestCases.h"
#import "Card.h"
@implementation CardTestCases
- (void) testInitByIndex {
Card *testCard = [[Card alloc] initByIndex:13];
STAssertNotNil(testCard, @"Card not created successfully");
STAssertTrue(testCard.rank == 0,
@"Expected Rank:%d Created Rank:%d", 0, testCard.rank);
[testCard release];
}
@end
FYI Tôi đã nhận lỗi cùng đăng nhập một BOOL dưới dạng chuỗi trong thử nghiệm của tôi: BOOL b = CÓ; NSLog (@ "% @", b); Lưu ý rằng nếu b = NO, nó không sụp đổ! – Rob