这是我在本地成功的测试代码:
- (void)setUp {
restroom = [[Restroom alloc] initWithName:@"Target" andIsAccessible:FALSE andIsUnisex:TRUE];
}
- (void)tearDown {
restroom = nil;
}
- (void)testThatARestroomCanBeCreated
{
XCTAssertNotNil(restroom, @"Should be able to create a Restroom instance.");
}
- (void)testThatRestroomHasAName
{
XCTAssertEqualObjects(restroom.name, @"Target", @"Restroom should have the name given when initialized.");
}
- (void)testThatRestroomHasAFlagForAccessibility
{
XCTAssertEqual(restroom.isAccessible, FALSE, @"Restroom should have the accessibility flag given when initialized.");
}
- (void)testThatRestroomHasAFlagForUnisex
{
XCTAssertEqual(restroom.isUnisex, TRUE, @"Restroom should have the unisex flag given when initialized.");
}
然而,当Travis处理它时,我只得到与布尔值相关的测试的错误:
✗ -[RRiOSAppTests testThatRestroomHasAFlagForAccessibility] (0 ms) (0)
-[RRiOSAppTests testThatRestroomHasAFlagForUnisex]
/ Users / travis / build /.../ RRiOSApp / RRiOSAppTests / RRiOSAppTests.m:91:((restroom.isUnisex)等于(1))失败:(“YES”)不等于(“1”) - 洗手间在初始化时应该有男女皆宜的标志。:
...
✗ -[RRiOSAppTests testThatRestroomHasAFlagForUnisex] (0 ms) (1)
✓ -[RRiOSAppTests testThatRestroomHasAName] (0 ms)
/ Users / travis / build /.../ RRiOSApp / RRiOSAppTests / RRiOSAppTests.m:86:((restroom.isAccessible)等于(0))失败:(“NO”)不等于(“0”) - 洗手间在初始化时应具有可访问性标记。
我尝试用TRUE
和FALSE
替换1
和0
- 但是出现了同样的错误。
这是我的 .travis.yml 文件:
language: objective-c
install:
- brew remove --force xctool
- brew install xctool --HEAD
script:
- xctool test -project RRiOSApp/RRiOSApp.xcodeproj -scheme RRiOSApp -sdk iphonesimulator7.0
而且,我正在使用Xcode 6
答案 0 :(得分:1)
BOOL
可以是YES
或NO
,不是TRUE
或FALSE
。 TRUE
与YES
的类型不同,这就是测试失败的原因。还有true
,这是一种完全不同的类型。
TRUE
在Core Foundation中定义为:
#define TRUE 1
YES
在ObjC运行时中定义为:
#define YES (BOOL)1
true
的定义有所不同,具体取决于您是编译为C99还是C ++。如果您感到好奇,可以在stdbool.h
中查找。
但无论如何,你不应该测试BOOL
的相等性(不仅仅是在测试中)。你应该测试真相。您想要的测试是XCTAssertTrue
和XCTAssertFalse
。有许多“真实”值不等于YES
或TRUE
,这就是为什么测试BOOL
上的相等性容易出错。
答案 1 :(得分:0)
我在阅读有关TDD的教科书时,我自己随机找到了问题的答案。我不得不在XCTAssertEqual(例如XCTAssertEqual(restroom.isAccessible, (BOOL)FALSE, @"Restroom should have the accessibility flag given when initialized.");
)中投放布尔值。这本书是测试驱动的iOS开发'作者:Graham Lee - 强烈推荐!