2010-05-27 11 views
1

J'ai construit un test d'unité et d'écriture dans GHUnit. L'une des méthodes d'accès de mon Framework renvoie un NSInteger.Différences NSInteger entre CLI et GUI?

J'affirme la valeur attendue dans les essais comme celui-ci:

GHAssertEquals(1320, request.port, @"Port number should be 1320"); 

Lors de l'exécution de mes tests avec une interface utilisateur basée frontend AppKit cette affirmation passe.

Cependant, lorsque j'exécute mes tests sur la ligne de commande, il échoue avec une incompatibilité de type à moins que je tape mon code 1320 codé en dur comme (NSInteger). Qu'est-ce qui cause la différence dans la façon dont l'entier est interprété par le compilateur? Xcodebuild est-il sur la ligne de commande en utilisant un type de données différent pour les entiers codés en dur?

Répondre

2

Est-ce que vous construisez vos applications pour différentes architectures (peut-être parce que l'on construit des architectures universelles et que l'on construit pour une architecture)? NSInteger génère 32 bits ou 64 bits en fonction de l'architecture cible (src), ce qui peut différer de ce que le compilateur choisit pour une petite constante. La distribution rend certainement vos intentions claires.

+1

Le compilateur choisira 'int' pour une constante égale à 1320. Il s'agit d'une constante décimale, sans suffixe, et qui se situe dans la plage minimale spécifiée pour' int'. – dreamlax

+0

Vous avez raison! Je construisais un binaire universel depuis Xcode. Mes tests sont moins fragiles si je suis explicite sur les types de données en tout cas donc c'était une bonne trouvaille :) – d11wtq