J'essaie actuellement d'apprendre l'objectif-c en utilisant XCode 3.1. J'ai travaillé sur un petit programme et j'ai décidé d'y ajouter des tests unitaires. J'ai suivi les étapes de la page Apple Developer - Automated Unit Testing with Xcode 3 and Objective-C. Quand j'ai ajouté mon premier test, ça a bien fonctionné quand les tests ont échoué, mais quand j'ai corrigé les tests, la compilation a échoué. Xcode signalé l'erreur suivante:Pourquoi mes tests OCUnit échouent-ils avec le "code 138"?
error: Test host '/Users/joe/Desktop/OCT/build/Debug/OCT.app/Contents/MacOS/OCT' exited abnormally with code 138 (it may have crashed).
Essayer d'isoler mon erreur, je re-suivre les étapes de l'exemple de test unitaire ci-dessus et l'exemple travaillé. Lorsque j'ai ajouté une version simplifiée de mon code et un scénario de test, l'erreur est retournée.
Voici le code que j'ai créé:
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
Pour votre information j'ai eu la même erreur l'enregistrement d'une BOOL comme une chaîne dans mon test: BOOL b = OUI; NSLog (@ "% @", b); Notez que si b = NO, il ne plante pas! – Rob