2015-04-06 7 views
0

В .m файл у меня есть такие методы, каккак получить UIButton значение состояния в test.m файле

-(void) textdata 
{ 
    long i = search.text.length; 
    if (i > 0) { 
     searchButton.enabled = YES;   
    } 
    else 
    { 
     searchButton.enabled = NO; 
    } 
    [self buttonstate]; 
} 

-(int) buttonstate 
{ 
    if ([searchButton isEnabled]) { 
     j = 1; 
    } 
    else 
     j = 0; 

    NSLog(@" j value is %d",j); 
    return j; 
} 

- (void) textFieldDidChange 
{ 
    [self textdata]; 
    NSLog(@"test data is %@",search.text); 
} 

И в файле tests.m у меня есть тест, как

-(void) testwithoutData 
{ 
    myapiViewController *apiViw = [[myapiViewController alloc]init]; 
    [apiViw textdata]; 

    int kn = [apiViw buttonstate]; 
    NSLog(@"the value is %ld",(long)kn); 
} 
+0

В вашем случае его на самом деле указывает на ноль поэтому вы получаете j = 0. Это связано с тем, что он создает новую ссылку на контроллер вида. Я думаю, вы должны добавить эти методы в файл test.m и передать значение вручную. –

+0

Просьба уточнить это для меня sir –

ответ

0

Вы должны сделать alloc init, потому что эта переменная экземпляра получает нуль. Попробуйте это -

В ViewController.m -

-(int) buttonstate { 

long i = self.searchTxt.text.length; 

if (i > 0) { 
    self.searchBtn.enabled = YES; 
} 
else 
{ 
    self.searchBtn.enabled = NO; 
} 

if ([self.searchBtn isEnabled]) { 
    j = 1; 
} 
else  
j = 0; 


NSLog(@" j value is %d",j); 

return j; 
} 

В ViewControllerTests.m -

- (void)testExample { 
    // This is an example of a functional test case. 
    XCTAssert(YES, @"Pass"); 
    self.vcToTest.searchTxt = [[UITextField alloc] init]; 
    self.vcToTest.searchBtn = [[UIButton alloc] init]; 

    self.vcToTest.searchTxt.text = @"test"; 
    int kn = [self.vcToTest buttonstate];  
    NSLog(@"the value is %ld",(long)kn); 
} 

Проверить прилагаемый скриншот - выход enter image description here

+0

sir У меня есть UItextField и UiButton, когда пользовательские нажатия и textField содержат данные, тогда кнопка будет включена, я хочу, чтобы тестовый пример в тестовом примере я буду давать searchtextField.text = @ "xxx", а затем проверить j = 1, то тестовый случай buttonenabled пройдет XCTAssertEqual (j, 1), я пытаюсь это сделать сэр. –

+0

сэр. У меня есть одно сомнение при загрузке представления, если я не вызываю метод textData, если я помещаю seachtextField.text = @ "xxxxx", тогда кнопка не включена, если я вызываю метод, тогда кнопка включена почему? сэр, почему он не смог его распознать –

+0

проверить мой обновленный код. см., поскольку вы вызываете метод viewcontroller в тестовом файле. поэтому, когда вы передаете данные для searchtextField из test.m, на самом деле в viewcontroller его получение nil. поэтому, чтобы этого избежать, вам нужно выполнить команду init. –