2013-05-21 4 views
0

Если я создаю новый проект, который включает в себя модульные тесты, вызовы будут вызваны. Но когда я добавляю тесты для существующего проекта я получаю следующее в журнале:Неисправные тестовые примеры OCUnit

2013-05-21 19:41:08.814 otest[51593:7e03] Unknown Device Type. Using UIUserInterfaceIdiomPhone based on screen size 
Test Suite '/Users/impadmin/Library/Developer/Xcode/DerivedData/SmartDiary-frrybdtgyyjgewbialqsmxkwvlxs/Build/Products/Debug-iphonesimulator/testSmartDiary.octest(Tests)' 

начался в 2013-05-21 14:11:09 +0000 Test Suite «» testShowContacts стартовал в 2013-05-21 14:11:09 +0000 Тестовый комплект TestShowContacts закончился в 2013-05-21 14:11:09 +0000. Выполненная 0 тестов с 0 отказов (0 неожиданный) в 0,000 (0,000) секунд

Я добавил SenTestKit на каркасы, а затем добавили пакет тестирования с помощью Add Target. Где я иду не так?

Позвольте мне добавить метод и его тестовый пример здесь:

// метод для тестирования

-(IBAction)addTask{ 
    if(!([mPriority.text isEqualToString:@"1"] ||[mPriority.text isEqualToString:@"2"] ||[mPriority.text isEqualToString:@"3"] ||[mPriority.text isEqualToString:@"4"] ||[mPriority.text isEqualToString:@"5"])) 
    { 
     NSLog(@"Enter valid Priority value"); 
    } 
    else if ([mTaskName.text isEqualToString:@""]) { 
      NSLog(@"Task name can't be blank"); 
     } 
     else{ 
    sqlite3_stmt *statement; 
    const char *dbPath = [mDatabasePath UTF8String]; 
    //[[appViewController returnObject].mDatabasePath UTF8String]; 

    if (sqlite3_open(dbPath, &mDiary) == SQLITE_OK) 
    { 
     NSLog(@"%@",mPriority.text); 

     NSString *insertSQL2=[NSString stringWithFormat:@"INSERT INTO TODO VALUES(\"%@\",\"%@\",\"%@\",\"%@\",\"%@\")",mStartDate.text,mEndDate.text,mTaskName.text,mTaskDescription.text,mPriority.text]; 
     NSLog(@"%@",insertSQL2); 
     const char *insert_stmt2 = [insertSQL2 UTF8String]; 
     sqlite3_prepare_v2(mDiary, insert_stmt2, 
          -1, &statement, NULL); 
     NSLog(@"%@",mPriority.text); 
     if (sqlite3_step(statement) == SQLITE_DONE) 
     { 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
     } 
     else { 

      NSLog(@"failed to add"); 
     } 
     sqlite3_finalize(statement); 
     sqlite3_close(mDiary); 
     } 
    } 


} 

// вот тест:

-(void)testAddTask 
{ 
    AddTaskViewController *obj; 
    obj = [[AddTaskViewController alloc]init]; 
    obj.mTaskName.text = @"t1"; 
    obj.mTaskDescription.text = @"t2"; 
    obj.mStartDate.text = @"56987"; 
    obj.mEndDate.text = @"55425"; 
    obj.mPriority.text = @"3"; 

    [obj addTask]; 
    sqlite3_stmt *statement; 
    const char *dbpath = [obj.mDatabasePath UTF8String]; 
    if (sqlite3_open(dbpath,&mDiaryTest)== SQLITE_OK) { 
     NSString *selectSQL = [NSString stringWithFormat:@"SELECT * FROM TODO WHERE mTaskName = \"%@\"",obj.mTaskName.text]; 
     const char *query_stmt = [selectSQL UTF8String]; 
     if (sqlite3_prepare_v2(mDiaryTest, 
           query_stmt, -1, &statement, NULL) == SQLITE_OK) 
     { 
      if(sqlite3_step(statement) == SQLITE_ROW) 
      { 
       testString = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)]; 
      } 
     } 
    } 
    sqlite3_finalize(statement); 
    sqlite3_close(mDiaryTest); 
    NSLog(@"%@",testString); 
    STAssertEquals(testString,@"t2",@"should be equal"); 

} 

Я обнаружил, что в целевых зависимостей, проект был снят. Я проверил его и снова испытание, после чего я получаю следующие ошибки:

Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_AddTaskViewController", referenced from: 
     objc-class-ref in testAddTask.o 
    "_sqlite3_close", referenced from: 
     -[testAddTask testAddTask] in testAddTask.o 
    "_sqlite3_column_text", referenced from: 
     -[testAddTask testAddTask] in testAddTask.o 
    "_sqlite3_finalize", referenced from: 
     -[testAddTask testAddTask] in testAddTask.o 
    "_sqlite3_open", referenced from: 
     -[testAddTask testAddTask] in testAddTask.o 
    "_sqlite3_prepare_v2", referenced from: 
     -[testAddTask testAddTask] in testAddTask.o 
    "_sqlite3_step", referenced from: 
     -[testAddTask testAddTask] in testAddTask.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Я знаю, что это, вероятно, будет не по теме, так как первоначальный вопрос был совершенно иным, но может кто-нибудь пожалуйста, скажите мне, почему эти ошибки приходит? Я добавил необходимые рамки.

+0

Начните ли ваши тестовые имена с 'test'? OCUnit запускает только те методы, которые начинаются с этого слова. – vcsjones

+0

да, они начинаются с теста – StudentX

ответ

0

Как вы тестируете UIKit зависимый материал, вы хотите запустить Application Tests. Убедитесь, что вы установили настройки сборки Bundle Loader и Test Host (см. documentation).

Кроме того, вы должны связать libsqlite3.0.dylib с целью тестирования, так как вы используете функции sqlite в своих модульных тестах.

+0

спасибо за ответ Я перешел по этой ссылке, чтобы узнать больше о загрузчике пакетов и настройках тестового хоста: http: //twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios -project-with-xcode-4/# comment-1804 – StudentX

+1

Эй, не могли бы вы исправить ссылки в своем посте? Они 404. – ThiefMaster

Смежные вопросы