2011-08-07 54 views
0

产品构建成功,但测试失败。我如何通过下面的STAssertEquals报告的类型不匹配失败?Xcode:Objective-C:类型不匹配

// TransactionSpec.m 

#import "Transaction.h" 

@interface TransactionSpec : SenTestCase 
@end 

@implementation TransactionSpec 

#pragma mark Properties 

- (void)testProperties { 
    Transaction *transaction = [[Transaction alloc] init]; 
    transaction.type = TransactionTypePay; 

    STAssertNotNil(transaction, @"transaction exists"); 
    STAssertEquals(transaction.type, TransactionTypePay, @"type property works"); // Type mismatch 
} 

@end 

// Transaction.h 

typedef enum { 
    TransactionTypePay, 
    TransactionTypeCharge 
} TransactionType; 

@interface Transaction : NSObject 

@property (nonatomic) TransactionType *type; 

@end 

// Transaction.m 

#import "Transaction.h" 

@implementation Transaction 

@synthesize type; 

@end 

回答

2

type属性被声明为指针来枚举,这可能不应该这样

+0

应该如何声明?我只是跟着[''](https://github.com/enormego/UIKit/blob/af0df999735b29259b2a64342d616bc04bce54de/UITableView.h#L15-18)。 – ma11hew28

+0

哦!得到它了!谢谢! – ma11hew28

1

铸造transaction.typeTransactionType修复该问题:

STAssertEquals((TransactionType)transaction.type, TransactionTypePay, @"type property works"); 

可是,我为什么要必须这样做,因为我声明:

@property (nonatomic) TransactionType *type; 
+0

糟糕。 'type'前取出星号(*)。那么,你不必施放它。 – ma11hew28

3

您的type物业是指针TransactionType(这可能不是预期的),而TransactionTypePay是一个实际的TransactionType

+0

甜!它现在通过。谢谢。愚蠢的错误。 :) – ma11hew28