2015-09-28 106 views
29

我試圖添加一個測試目標到我的項目,但是當我運行測試它似乎是實際的測試沒有被執行,而是Xcode總是報告成功,但是指示測試是否通過的小方格仍然清晰。Xcode 7測試不運行,但報告成功

我只有一個測試目標和一個類:

@implementation Tests 

- (void)setUp { 
    [super setUp]; 
    // Put setup code here. This method is called before the invocation of each test method in the class. 
} 

- (void)tearDown { 
    // Put teardown code here. This method is called after the invocation of each test method in the class. 
    [super tearDown]; 
} 

- (void)testExample { 
    // This is an example of a functional test case. 
    // Use XCTAssert and related functions to verify your tests produce the correct results. 
    XCTAssert(false, ""); 
} 

- (void)testPerformanceExample { 
    XCTAssert(false, ""); 
} 

@end 

測試應該失敗,但它會顯示一個彈出說成功。此外,測試報告還說沒有測試。

如果我試圖單獨運行測試,測試「成功」,但我沒有得到關於報告的信息,並且方塊仍然爲空。

關於如何解決它的任何想法?

+0

你設法解決這個問題?我得到同樣的問題 – Kesava

+0

對不起。它帶走了XCode更新 – Emanuel

回答

-2

一個Xcode更新變得可用,我更新瞭解決了這個問題。

如果你也有這個問題,請查看Martin Van Buren的回答,它對我的​​情況沒有幫助,但值得一試。

20

如果您正在爲iOS構建,您是否通常將Xcode設置爲在物理設備上運行?如果是這樣,請嘗試將其設置爲在iOS模擬器上運行。

我發現如果您將Xcode 7設置爲物理設備上的單元,則測試的行爲與您所描述的完全相同。將Xcode設置爲在iOS模擬器上暫時運行以進行單元測試,解決了問題,現在它就像魅力一樣。

我希望這可以幫助任何人遇到同樣的問題。 :D

+0

不錯的工作。這個對我有用。 – dusty

+0

所以你只需在模擬器上運行測試,通過,然後在設備上,它的工作?如果是這樣,它仍然不適合我:/通常重置電話和/或Xcode和/或刪除派生數據有助於 – raistlin

+0

爲我工作。這很傷心,但它對我有用。 – DCMaxxx

9

關閉iOS設備的電源,然後重新打開電源。您可能還想要移除USB電纜並重新連接,以便Xcode可以重新建立與設備的通信。當這發生在我身上的時候,測試會立即報告測試成功,而沒有運行測試。我還注意到,當我嘗試記錄Xcode每次崩潰時的新UI測試操作時 - 與我在首次啓用iOS設置 - 開發人員 - 啓用UI自動化設置之前的行爲方式類似,我記得需要重啓iOS設備當啓用此功能時,我嘗試重啓iOS設備,並且Xcode開始再次運行,可以在我的iOS設備上成功記錄和運行測試。完全披露:在重新啓動iOS設備之前,我還打開和關閉了啓用UI自動化功能,但我懷疑這是必需的。 -rrh

+0

實際啓用UI自動化和重新啓動設備幫助我 – sage444

-1

如果這是用於UI自動化測試,那麼可能是因爲您沒有初始化應用程序並啓動它。

XCUIApplication *app = [[XCUIApplication alloc] init]; 
[app launch]; 
1

我有同樣的問題,清理生成文件夾將解決它。但是,有更快的方法正在執行Product -> Perform Action -> Test Without Building

9

檢查控制檯(Command-Shift-Y)。

在我的情況下有輸出被打印,指出爲什麼測試沒有運行。 (動態框架的飛行前檢查失敗。)但是我沒有看到它,因爲調試區域被摺疊了。

而且在我的情況的問題是固定的,加入$(PROJECT_DIR)/Carthage/Build/iOS到我的運行時搜索路徑描述here

+0

這正是我的問題,謝謝! – phatmann

+0

也是我的問題。非常感謝。這令人驚訝地很難找到。 – user1244109

+0

對我來說,問題是我忘了取消以前從測試模塊中刪除的框架。感謝您提醒控制檯:D –

16

對於任何人面對這個問題,檢查以確保您的測試類是從XCTestCase繼承,而不是XCTest 。直到我意識到我是從錯誤的班級繼承,我纔會瘋狂地嘗試所有這些解決方案。 Xcode不會抱怨,它只會說測試成功而不運行它們。希望這可以幫助某人。

+0

正確的點!我是從XCTest繼承而來,並且一直在撓撓我的頭腦,以至於發生了什麼錯誤。謝謝! – akshay1188

+0

這也是我的問題!非常感謝你發佈這個答案! –

+0

同樣,非常感謝! –

4

值得一提的是,將來任何人都會遇到這種情況:Xcode只運行以'test'開頭的XCTestCase函數。這與其他平臺相反,當我開始在iOS中進行測試時,我感到困惑。

在下面的類:

class MyBigTest: XCTestCase { 

    func testSensibleInputReturnSensibleAnswer() { 
     XCTAssert(/* stuff */) 
    } 

    func someOtherTest() { 
     XCTAssert(/* some other stuff */) 
    } 
} 

只有testSensibleInputReturnSensibleAnswer()運行。

1

老問題,但在這裏沒有提到,解決它在我的情況的事情:

你不能(?總是)重命名測試類/件。創建一個新的課程/案例並丟棄舊的課程。

1

FWIW我在使用KIF的beforeAll時也遇到了非常類似的問題。有時放在beforeAll內的代碼不起作用,測試仍然會成功。

它有時也會使Xcode崩潰。請參閱KIF的Github頁面here。雖然有人指出,問題可能不是因爲KIF和XCTest本身

的,而因爲臨時溶液避免使用beforeAll,而使用beforeEach