2014-09-27 32 views
1

這裏是我的測試代碼在本地成功:Objective-C的特拉維斯問題在XCTAssertEqual布爾值:(「否」),不等於(「0」)

- (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."); 
} 

然而,當特拉維斯處理它,我得到錯誤僅與布爾值測試:

✗ -[RRiOSAppTests testThatRestroomHasAFlagForAccessibility] (0 ms) (0) 
    -[RRiOSAppTests testThatRestroomHasAFlagForUnisex] 

/Users/travis/build/.../RRiOSApp/RRiOSAppTests/RRiOSAppTests.m:91:((restroom.isUnisex)等於( 1))失敗:(「是」)不等於(「1」) - 廁所應具有初始化時給出的男女通用標誌。:

...

✗ -[RRiOSAppTests testThatRestroomHasAFlagForUnisex] (0 ms) (1) 
✓ -[RRiOSAppTests testThatRestroomHasAName] (0 ms) 

/Users/travis/build/.../RRiOSApp/RRiOSAppTests/RRiOSAppTests.m:86:((restroom.isAccessible)等於(0))失敗:(「NO」)不等於(「0」) - 廁所應具有初始化時給出的輔助功能標誌。

我試着用10更換TRUEFALSE - 但來到同樣的錯誤有關。

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

+1

「isUnisex」屬性的類型是什麼? – 2014-09-27 21:31:44

+0

它是'BOOL'類型 – 2014-09-27 23:13:19

回答

1

BOOL要麼YESNO,不TRUEFALSETRUEYES不同,因此測試失敗。還有true,這是一個完全不同的類型。

TRUE在覈心基礎定義爲:

#define TRUE 1 

YES在ObjC運行時定義爲:

#define YES (BOOL)1 

true這取決於你正在編譯爲C99或C定義不同++ 。如果你好奇,你可以在stdbool.h查找它。

但是在任何情況下,您都不應該對BOOL進行相等測試(不止在測試中)。你應該測試真相。您要在這裏進行的測試是XCTAssertTrueXCTAssertFalse。有許多「真實」值不等於YESTRUE,這就是爲什麼在BOOL上測試相等性容易出錯的原因。

0

我只是隨機找到了問題的答案,而我自己閱讀TDD的教科書。我必須在XCTAssertEqual中投擲布爾值(例如XCTAssertEqual(restroom.isAccessible, (BOOL)FALSE, @"Restroom should have the accessibility flag given when initialized.");)。這本書是由Graham Lee撰寫的'測試驅動的iOS開發' - 強烈推薦!