2010-12-22 65 views
0

我創建了一個視圖控制器viewsampleViewController ..它有兩個方法setname和getname ..我爲該視圖控制器創建一個測試用例。我的測試用例名稱是newTestCase,方法名稱是testName。

#import "newTestCase.h" 
#import "viewsampleViewController.h" 


@implementation newTestCase 
在我的測試名法

-(void)testName{ 

NSString *[email protected]"hello"; 
v =[[viewsampleViewController alloc] init]; 
STAssertNotNil(v,@"v doesnt created"); 
[v setuname:@"hello"]; 
NSString *a=[v getuname]; 

STAssertEquals(b,a,@"error:name not equal"); 
[v release]; 

} 

-(void)setUp{ 
v=[viewsampleViewController alloc]; 
} 

-(void) tearDown{ 
[v release]; 
} 

當我建立我得到一個錯誤

Ld "build/Debug-iphoneos/Unit test.octest/Unit test" normal armv6 
cd /Users/anande/Documents/viewsample 
setenv IPHONEOS_DEPLOYMENT_TARGET 3.1.3 
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -bundle -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk -L/Users/anande/Documents/viewsample/build/Debug-iphoneos -F/Users/anande/Documents/viewsample/build/Debug-iphoneos -F/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk/Developer/Library/Frameworks -filelist "/Users/anande/Documents/viewsample/build/viewsample.build/Debug-iphoneos/Unit test.build/Objects-normal/armv6/Unit test.LinkFileList" -dead_strip -framework Foundation -framework SenTestingKit -miphoneos-version-min=3.1.3 -o "/Users/anande/Documents/viewsample/build/Debug-iphoneos/Unit test.octest/Unit test" 


Undefined symbols: 
    "_OBJC_CLASS_$_viewsampleViewController", referenced from: 
     [email protected] in newTestCase.o 
ld: symbol(s) not found 

collect2: ld returned 1 exit status 

plz幫助我,

+0

我的解決辦法是在鏈路上嘗試,如果你想.. :) 鏈接:http://stackoverflow.com/a/10415850/1092219 – 2012-05-02 14:34:26

回答

19

連接問題出現,因爲架構依賴。其實當我們從一些其他來源的話,有可能一些文件添加到我們的項目沒有確定確切dependency.So編譯器生成的鏈接error.I通過以下步驟來解決這個問題:

  1. 選擇目標
  2. 選擇建立階段
  3. 選擇編譯源代碼
  4. 選擇+圖標
  5. 選擇您越來越錯誤.m文件,並添加它。
  6. 清理構建並再次運行。
2

不知何故,viewsampleViewController.m文件不被編譯。確保它是項目的一部分。

+0

感謝馬丁..當我加我.m文件來測試目標它的作品..非常感謝....但馬丁。在蘋果教程中已經描述過,一旦我添加了依賴關係,那麼不需要添加.m文件來測試目標。我添加依賴關係。那麼爲什麼不工作 – Almand 2010-12-24 04:37:29

14

這是一個鏈接器錯誤,將viewsampleViewController.m添加到您的測試目標。 請開始你的類名大寫,讓一切有更多可讀

+0

感謝馬丁..當我添加我的.m文件測試目標它的工作..非常感謝......但馬丁。在蘋果教程中已經描述過,一旦我添加了依賴關係,那麼不需要添加.m文件來測試目標。我添加依賴關係。那麼爲什麼不能正常工作 – Almand 2010-12-24 04:38:48

+0

如果您正在開發一個靜態庫,那麼您可以將庫添加爲測試包目標上的「其他鏈接器標記」構建設置。但是,您正在測試應用程序viewController,因此您必須將實現文件包含在測試目標中進行編譯。它無法鏈接到應用程序包。對於靜態庫,你在庫前加-l。要讓編譯器查找名爲MyStaticLib.a的靜態庫,請在測試目標版本設置中的「其他鏈接器標誌」中添加「-lMyStaticLib」。 – levous 2011-07-27 02:54:41

0

我有同樣的問題,在我做一些項目來源的變化。 所有的.m被改爲.mm,由於某些原因,在'Link Binary With Libraries'中,有問題的特定類沒有添加到那裏,而是在'Copy Bundle Resources'中。我改變了它的工作。

所以這是我做過什麼:

1)點擊藍色的項目選項卡上的Xcode的左上方。 2)轉到'TARGETS'選項。 3)進入「Build Phases」標籤。 4)轉到'複製捆綁資源'。 5)查找實現文件(.m,.mm),如果它在那裏,通過單擊減號( - )選項將其刪除。 6)轉到「編譯源代碼」並單擊加號(+)選項並添加該實現文件。 7)編譯並打它,兄弟,你很好走。

希望這會有所幫助。 乾杯。

0

將您的應用程序的.m文件直接添加到您的測試目標可解決問題,這是多餘的和不必要的。跟着the steps outlined here by Two Bit Labs讓它工作。總結起來,請確保您的...

  1. 測試目標的Bundle Loader構建設置指向您的應用程序包。
  2. 測試目標的Test Host構建設置指向您的應用程序包。
  3. 應用目標的Symbols Hidden by Default構建設置爲NO
相關問題