2014-11-04 162 views
0

我有三個類:ClassA,ClassB和ClassC。NSObject +(BOOL)isSubclassOfClass:返回錯誤結果的方法

ClassC繼承自繼承自ClassA的ClassB。

我試圖寫一個單元測試,以驗證ClassC從ClassB的繼承:

XCTAssertTrue([ClassC isSubclassOfClass:[ClassB class]]); 

這個返回false。

XCTAssertTrue([ClassC isSubclassOfClass:[ClassA class]]); 

返回true。

[ClassC class] superclass] 

返回ClassB。

請注意,當我在控制檯中測試[ClassC isSubclassOfClass:[ClassB class]]時,它會返回true,即使我在我的單元測試中的代碼立即對相同測試返回false之前進行測試!

任何人都可以解釋這是怎麼發生的?


我嘗試了Bryan的意見。從我的單元測試記錄,我得到:從控制檯

0x102a8c4e0 0x110d21820

記錄我得到:

0x102a8c4e0 0x102a8c4e0

+1

您是否已通讀此主題? http://stackoverflow.com/questions/19883472/objc-nsobject-issubclassofclass-gives-incorrect-failure – Priyatham51 2014-11-04 22:51:55

+0

這看起來像是同樣的問題,但我沒有在靜態庫中的任何類。 – Darren 2014-11-04 23:04:47

+1

'NSLog(@「%p%p」,[ClassC superclass],[ClassB class])'看看他們是不是不同 – 2014-11-04 23:11:54

回答

2

很可能你有一定的類添加到您的應用目標和您的單元測試目標。

您的課程只能添加到應用目標中。

從您的編輯看,它看起來像是ClassB這是錯誤的 - 但它是值得檢查所有三個。

SenTest/XCTest使用測試工具,使應用程序中包含的類可用於測試,而無需明確包含它們的實現。

包括兩者都給了你重複的類,這就是爲什麼他們有不同的內存地址。

+0

感謝您的建議,但我無法看到ClassB會被添加到測試目標中的哪個位置 - 在檢查器目標成員小部件中,只有應用程序目標被選中,並且它不會出現在「構建階段」的「編譯源」列表中目標。其他班級也一樣。 – Darren 2014-11-05 00:16:52