Для моего проекта я хотел сделать это немного TDD, хотя я совершенно новичок в Objective C и модульном тестировании. Я создал проект, который подключается к веб-службе, которая возвращает ответ json. Теперь я создал модульный тест, чтобы издеваться над веб-службой, и он продолжает падать (даже не терпеть неудачу), и на данный момент я полностью потерян....
У меня есть следующая установка:
SignUpService
(для создания новой учетной записи), который использует ServiceHelper
(который делает фактические запросы веб-службы http). Вот так 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? (как предложено здесь и здесь)
Любые мысли или предложения для начинающего разработчика Objective C?