对IBOutlets进行单元测试有点容易,但IBActions呢?我试图找到一种方法,但没有任何运气.有没有办法在View Controller中的IBAction和nib文件中的按钮之间进行单元测试连接?
解决方法
对于完整的单元测试,每个插座/操作需要三个测试:
>插座是否连接到视野?
>插座是否与我们想要的动作相关联?
>直接调用操作,就像它已被插座触发一样.
我一直这样做TDD我的视图控制器.您可以看到示例in this screencast.
听起来你在具体询问第二步.这是一个单元测试的例子,用于验证myButton内部的修饰是否会调用doSomething:这是我用OCHamcrest表达的方式.(sut是被测系统的测试夹具.)
- (void)testMyButtonAction { assertThat([sut.myButton actionsForTarget:sut forControlEvent:UIControlEventTouchUpInside],contains(@"doSomething:",nil)); }
或者,这是一个没有Hamcrest的版本:
- (void)testMyButtonAction { NSArray *actions = [sut.myButton actionsForTarget:sut forControlEvent:UIControlEventTouchUpInside]; XCTAssertTrue([actions containsObject:@"doSomething:"]); }