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

XCTAssertEqual中布尔值的Objective-C Travis问题:(“否”)不等于(“0”),objective-c,xcode6,travis-ci,Objective C,Xcode6,Travis Ci,以下是我在本地成功的测试代码: - (void)setUp { restroom = [[Restroom alloc] initWithName:@"Target" andIsAccessible:FALSE andIsUnisex:TRUE]; } - (void)tearDown { restroom = nil; } - (void)testThatARestroomCanBeCreated { XCTAssertNotNil(restroom, @"S

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

- (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”)-restroom在初始化时应给出中性标志:

/Users/travis/build/../RRiOSApp/RRiOSAppTests/RRiOSAppTests.m:86:((restroom.isAccessible)等于(0))失败:(“NO”)不等于(“0”)-restroom应在初始化时给出可访问性标志

我试着用
1
0
替换
TRUE
FALSE
——但同样的错误发生了

这是我的.travis.yml文件:


而且,我使用的是Xcode 6,我只是在阅读关于TDD的教科书时随机找到了这个问题的答案。我必须在xctasertequal中使用布尔值(例如,
xctasertequal(restroom.isAccessible,(BOOL)FALSE,@“restroom应该在初始化时给出可访问性标志”);
)。这本书是Graham Lee的《测试驱动的iOS开发》——强烈推荐

BOOL
YES
NO
,而不是
TRUE
FALSE
TRUE
YES
的类型不同,这就是测试失败的原因。还有
true
,这是一种完全不同的类型

<代码> true在核心基础中定义为:

#define TRUE 1
YES
在ObjC运行时中定义为:

#define YES (BOOL)1
根据您是否编译为C99或C++,定义不同的代码>真/ <代码>。如果您感兴趣,可以在stdbool.h中查找它


但在任何情况下,您都不应该测试与
BOOL
的相等性(永远,不仅仅是在测试中)。你应该检验真理。这里需要的测试是
xctasertrue
xctasertfalse
。有许多“真”值不等于
YES
true
,这就是为什么在
BOOL
上测试相等性容易出错的原因。

isUnisex属性的类型是什么?
#define TRUE 1
#define YES (BOOL)1