我以编程方式编写了以下按钮:
self.button = [[UIButton alloc] init];
[self.button setTitle:@"Reverse String!" forState:UIControlStateNormal];
self.button.backgroundColor = [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1.0];
self.button.layer.cornerRadius = 5.0;
[self.button addTarget:self action:@selector(reverseString:) forControlEvents:UIControlEventTouchUpInside];
但是,当我尝试测试时,我的单元测试失败了:
-(void)testButtonActionAssigned
{
XCTAssert([self.vc.button respondsToSelector:@selector(reverseString:)]);
}
我收到一条失败消息:
test failure: -[ViewControllerTests testButtonActionAssigned] failed: (([self.vc.button respondsToSelector:@selector(reverseString:)]) is true) failed
我的设置方法被称为:
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
self.vc = [[ViewController alloc] init];
NSLog(@"THIS METHOD IS CALLED");
}
这与模拟器计时和启动有关吗?
最佳答案
[self.button addTarget:self action:@selector(reverseString:) forControlEvents:UIControlEventTouchUpInside];
第一行意味着 reverseString:
方法应该在你的 ViewController
中(由 target:
参数指定,你传递 self
那里)。因此,您需要通过删除 .button
-(void)testButtonActionAssigned
{
XCTAssert([self.vc respondsToSelector:@selector(reverseString:)]);
}
这是一个可以改变的小例子:
UIButton *button = [UIButton new];
[button addTarget:self action:@selector(doThat:) forControlEvents:UIControlEventTouchUpInside];
NSString *selectorString = [[button actionsForTarget:self forControlEvent:UIControlEventTouchUpInside] firstObject];
SEL sel = NSSelectorFromString(selectorString);
// so now you can check if target responds to selector
// BOOL responds = [self respondsToSelector:sel];
NSLog(@"%@", selectorString);
关于iOS 单元测试按钮已分配 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34221688/