如何在 test.m 文件中获取 uibutton 状态值

Posted

技术标签:

【中文标题】如何在 test.m 文件中获取 uibutton 状态值【英文标题】:how to get the uibutton state value in test.m file 【发布时间】:2015-04-06 10:55:33 【问题描述】:

在 .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);

【问题讨论】:

在您的情况下,它实际上指向 nil,这就是您得到 j=0 的原因。这是因为它创建了对视图控制器的新引用。我认为您必须在 tests.m 文件中添加这些方法并手动传递值。 请先生详细说明 【参考方案1】:

你必须做 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);

检查随附的屏幕截图输出 -

【讨论】:

先生,当用户点击时我有 UItextField 和 UiButton 并且 textField 包含数据然后按钮将启用我想要一个测试用例中的测试用例我将给出 searchtextField.text = @"xxx" 然后检查 j = 1,然后测试用例 buttonenabled 将通过 XCTAssertEqual ( j,1 ) 我正在尝试那个东西先生。 先生,我在加载视图时有一个疑问,先生,如果我不调用方法 textData 如果我放 seachtextField.text = @"xxxxx",那么如果我调用该方法,则按钮未启用,然后按钮是为什么启用?先生,为什么它无法识别它 检查我更新的代码。看到因为您在测试文件中调用 viewcontroller 的方法。因此,当您实际上在 viewcontroller 中从 tests.m 中传递 searchtextField 的数据时,它会变为 nil。所以为了避免这种情况,你必须做 alloc init。 先生,如果我把 searchtext.text = @"" 放在它的工作原理上,那么它就不起作用了,先生 对于 searchtext.text=@"" 你会得到 j=0。因为它不会满足 i>0 的条件。您面临什么问题?

以上是关于如何在 test.m 文件中获取 uibutton 状态值的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift5中获取UIButton名称?

如何在自动布局视图中获取 UIButton 位置

我刚刚将 UIButton 添加到 UIView。如何获取按钮索引?

按下时如何获取 UIButton 的标题

如何从 UIScrollView 获取 UIButton 位置

如何在 Tableview 单元格中获取 UIButton 的位置,并在 Swift 中添加目标?