2011-12-26 156 views
4

我已經創建了一個新的Xcode 4.2 Cocoa項目,一個可可庫。 默認情況下,單元測試提供了下列單元測試:Xcode 4.2,無法運行單元測試

- (void)testExample 
{ 
    STFail(@"Unit tests are not implemented yet in learning01Tests"); 
} 

如果我按⌘U我可以看到測試建築和失敗的預期。 現在,我添加新的下面幾行,以測試我創建了一個外部類:

#import "svc01.h" 

- (void)testMyClass 
{ 
    svc01* svc = [[svc01 alloc]init]; 
    int expected = [svc addTwoNumbers:10 :10]; 
    STAssertTrue(21 == expected, @"It should fail!"); 
} 

我可以看到這兩個測試(默認設置,我的方法)未如預期。 問題是,有時候,即使我按命令Test,它彈出消息「生成成功」,然後「測試成功」,但如果我看輸出控制檯它說「測試運行0」

Is there我在做什麼不對?

UPDATE

現在我已經改變了我的測試方法的簽名和它不工作了。 我有這樣的:

#import <SenTestingKit/SenTestingKit.h> 

@interface learning01Tests : SenTestCase 
- (void)sumTwoIntegerShouldPass; 
- (void)sumTwoZeroShouldThrow; 

@end 
- (void)sumTwoIntegerShouldPass 
{ 
    svc01* svc = [[svc01 alloc]init]; 
    int expected = [svc addTwoNumbers:10 :10]; 
    STAssertTrue(20 == expected, @"It should fail!"); 
} 

- (void)sumTwoZeroShouldThrow 
{ 
    svc01* svc = [[svc01 alloc]init]; 
    int expected = [svc addTwoNumbers:0 :0]; 
    STAssertTrue(21 == expected, @"It should fail!"); 
} 

這是Xcode輸出:

-bfxnldmmxzsspnbglmrpwsnweqkd/Build/Products/Debug/learning01Tests.octest(Tests)' started at 2011-12-26 14:45:26 +0000 
Test Suite 'learning01Tests' started at 2011-12-26 14:45:26 +0000 
Test Suite 'learning01Tests' finished at 2011-12-26 14:45:26 +0000. 
Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.000) seconds 
Test Suite '/Users/raffaeu/Library/Developer/Xcode/DerivedData/learning01-bfxnldmmxzsspnbglmrpwsnweqkd/Build/Products/Debug/learning01Tests.octest(Tests)' finished at 2011-12-26 14:45:26 +0000. 
Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.002) seconds 

回答

1

你確認你的目標的構建設置?

這是名爲iOS開發目標的關鍵。如果它以粗體顯示,則應按下Delete鍵,以便它不顯示爲粗體,然後單元測試正確運行。

如果你想改變你的iOS開發目標,做如下:

  • 首先,打開項目設置/信息選項卡。然後選擇你想要的iOS開發目標
  • 然後,打開你的目標構建設置。如果iOS開發目標關鍵字以粗體顯示,請按Delete鍵

就是這樣。你的單元測試運行正常。

+0

我很抱歉,但這個解決方案行不通,請參閱我的更新 – Raffaeu 2011-12-26 14:48:32

8

在Xcode 4.2中,您需要使用前綴test來標記測試方法,以便讓它們運行。我發現這裏的解決方案: http://www.blog.holsee.com/2011/07/tests-driven-groking-of-cocoa-objective-c/

這將工作:

- (void)testThatsumTwoZeroShouldThrow 
{ 
    svc01* svc = [[svc01 alloc]init]; 
    int expected = [svc addTwoNumbers:0 :0]; 
    STAssertTrue(21 == expected, @"It should fail!"); 
} 

雖然這不會:

- (void)TestThatsumTwoZeroShouldThrow 
{ 
    svc01* svc = [[svc01 alloc]init]; 
    int expected = [svc addTwoNumbers:0 :0]; 
    STAssertTrue(21 == expected, @"It should fail!"); 
} 
+0

哇靠這工作!正在尋找同樣的事情:-) – thandasoru 2013-10-16 04:19:48