목표 C 및 단위 테스트가 처음인데도 불구하고 프로젝트에서 약간의 TDD를 수행하고 싶었습니다. json 응답을 반환하는 웹 서비스에 연결하는 프로젝트를 만들었습니다. 이제는 웹 서비스를 조롱하기 위해 단위 테스트를 만들었고 실패해도 계속 실패하고 있습니다 ....조롱 된 웹 서비스를 이용한 단위 테스트는 계속 충돌합니다.
다음 설정이 있습니다.
SignUpService
(새 계정 만들기) ServiceHelper
(실제 http 웹 서비스 요청을하는)을 사용합니다.
@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"));
}
,369,136 :
@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;
및 구현은 : ServiceHelper.h
이처럼3210
프로젝트에는 OCMock 버전 1.77 및 OCHamcrest 라이브러리가 포함되어 있습니다.
"프로세스가 종료 코드 0으로 완료되었습니다."라는 이유로 테스트가 계속 충돌합니다. 내가 디버깅 할 때 나는 무엇이 잘못되었는지 알 수 없다. 메모리 관리와 관련이 있거나 OCMock 및 ARC와 관련이 있다고 생각합니까? (like here 및 here)
새내기 Objective C 개발자를위한 생각이나 제안이 있으십니까?
안녕하세요, Erik, 의견을 보내 주셔서 감사합니다. 나는이 컴파일러/환경 설정에 대해별로 신경 쓰지 않는다. Xcode에 이러한 변수 나 @rpath를 넣어야하는 곳에서 나를 도울 수 있습니까? –