對於我的項目想要做一點TDD,雖然我是相當新的目標C和單元測試。我創建了一個連接到返回json響應的web服務的項目。現在,我已經創建了一個單元測試來模擬Web服務,它總是崩潰(甚至沒有失敗的),和我完全此刻失去了....單元測試與嘲笑的Web服務不斷崩潰
我有以下設置:
SignUpService
(創建一個新帳戶),它使用ServiceHelper
(這使得實際的http web服務請求)。像這樣ServiceHelper.h
:
@protocol ServiceHelperProtocol <NSObject>
@required
- (NSString *)get:(NSString *)url;
@end
@interface ServiceHelper : NSObject <ServiceHelperProtocol> {
NSMutableData *receivedData;
}
而且SignUpService.h
@class ServiceHelper;
@protocol SignUpServiceProtocol <NSObject>
- (NSString *)createUserAccount:(CreateUserAccountRequest *)createUserAccountRequest;
- (bool)doesUsernameExist:(NSString *)userName;
- (BOOL)isEmailValid:(NSString *)email;
- (BOOL)doesEmailExist:(NSString *)email;
@end
@interface SignUpService : NSObject <SignUpServiceProtocol> {
id <ServiceHelperProtocol> serviceHelper;
}
@property(strong) id <ServiceHelperProtocol> serviceHelper;
- (id)initWithHelper:(id <ServiceHelperProtocol>)myServiceHelper;
接下來是單元測試(SignUpServiceTests.h和實施)
@interface SignUpServiceTests : SenTestCase {
id <NSObject, ServiceHelperProtocol> serviceHelper;
SignUpService *signUpService;
CreateUserAccountRequest *createUserAccountRequest;
}
@property(nonatomic, strong) SignUpService *signUpService;
@property(nonatomic, strong) CreateUserAccountRequest *createUserAccountRequest;
@property(nonatomic, strong) id <NSObject, ServiceHelperProtocol> serviceHelper;
和實現:
@implementation SignUpServiceTests
@synthesize signUpService;
@synthesize createUserAccountRequest;
@synthesize serviceHelper;
- (void)setUp {
[super setUp];
// Set-up code here.
self.createUserAccountRequest = [[CreateUserAccountRequest alloc] init];
self.createUserAccountRequest.firstName = @"first-name";
self.createUserAccountRequest.lastName = @"last-name";
.....
self.serviceHelper = [ServiceHelper new];
self.signUpService = [[SignUpService alloc] initWithHelper:(id <ServiceHelperProtocol>) self.serviceHelper];
}
- (void)tearDown {
// Tear-down code here.
[super tearDown];
}
- (void)testOnCreateUserAccountShouldReturnCreatedUserIdWhenCorrectResponseFromService {
id mock = [OCMockObject partialMockForObject:(NSObject *) (id <ServiceHelperProtocol>) self.serviceHelper];
[[[mock stub] andReturn:@"{\"status\":\"ok\",\"create_user\":\"12\"}"] get:[OCMArg any]];
assertThat([self.signUpService createUserAccount:self.createUserAccountRequest], equalTo(@"12"));
}
該項目包含OCMock版本1.77和OCHamcrest庫。
由於某些原因,測試不斷崩潰「處理完成退出碼0」。當我正在調試時,我看不到發生了什麼問題。我覺得這與內存管理有關,還是與OCMock和ARC有關? (如建議here和here)
的新手目標C開發的任何想法或建議?
喜埃裏克,感謝您的評論。我不太這個編譯器/環境設置,你能幫我在哪裏,我需要把在Xcode這些變量或@rpath? – 2012-04-17 15:21:57