Objective-C Travis在XCTAssertEqual中的布尔值问题:(“NO”)不等于(“0”)

时间:2014-09-27 19:09:00

标签: objective-c xcode6 travis-ci

这是我在本地成功的测试代码:

- (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”) - 洗手间在初始化时应具有可访问性标记。

我尝试用TRUEFALSE替换10 - 但是出现了同样的错误。

这是我的 .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

2 个答案:

答案 0 :(得分:1)

BOOL可以是YESNO,不是TRUEFALSETRUEYES的类型不同,这就是测试失败的原因。还有true,这是一种完全不同的类型。

TRUE在Core Foundation中定义为:

#define TRUE 1

YES在ObjC运行时中定义为:

#define YES (BOOL)1

true的定义有所不同,具体取决于您是编译为C99还是C ++。如果您感到好奇,可以在stdbool.h中查找。

但无论如何,你不应该测试BOOL的相等性(不仅仅是在测试中)。你应该测试真相。您想要的测试是XCTAssertTrueXCTAssertFalse。有许多“真实”值不等于YESTRUE,这就是为什么测试BOOL上的相等性容易出错。

答案 1 :(得分:0)

我在阅读有关TDD的教科书时,我自己随机找到了问题的答案。我不得不在XCTAssertEqual(例如XCTAssertEqual(restroom.isAccessible, (BOOL)FALSE, @"Restroom should have the accessibility flag given when initialized.");)中投放布尔值。这本书是测试驱动的iOS开发'作者:Graham Lee - 强烈推荐!