Я создаю проект iPhone 5.0 в Xcode 4.2 и хотел бы найти покрытие кода при выполнении модульных тестов. Я совершенно новичок в среде Xcode, и я выполнил приведенные ниже шаги: here. Я могу правильно изменить настройки сборки для целевой цели и связать файл «libprofile_rt.dylib».Невозможно увидеть покрытие кода в Xcode 4.2
На этом этапе, когда я выполняю тесты (используя Command-U), компилируется код и проходят тесты. Я не сталкиваюсь с описанной проблемой here. Кроме того, я установил CoverStory.
Автор в первой ссылке упоминает "Just run your unit tests and view the code coverage data as usual"; однако я не могу найти .../Objects-normal/i386
.
Просто, чтобы все работало, я создал новый проект со следующим классом:
#import "SomeClass.h"
@implementation SomeClass
@synthesize someValue;
-(void)performWork:(BOOL)now withValue:(int)value {
if (now) {
someValue = value;
}
else {
someValue = value - 1;
}
}
@end
и тест класс:
#import "CodeCoverageTests.h"
#import "SomeClass.h"
@implementation CodeCoverageTests
- (void)testExample {
SomeClass *obj = [[SomeClass alloc] init];
[obj performWork:YES withValue:3];
STAssertEquals(obj.someValue, 3, @"Value was not 3");
}
@end
В идеале, я хотел бы быть уведомлен в некотором роде что при выполнении тестов предложение else
в методе performWork
никогда не запускается.
я, таким образом, имеют следующие вопросы:
- является проблемой корня, что нет никакой поддержки для того, что я пытаюсь сделать с новым компилятором?
- Является единственным решением, описанным user chown в ответ на вопрос, который я связал выше?
- Смогу ли я использовать CoverStory (или что-то подобное), если я последую за решением из 2)?
Update: После некоторой борьбы, я, наконец, смог найти местоположение "SomeClass.gcno" и файлы "SomeClass.gcda" (спасибо @bjhomer - см this link), и они красиво изобразили, что часть условного оператора performWork
была покрыта (и else
не был). Для того, чтобы убедиться, я изменил тест следующим образом:
- (void)testExample
{
SomeClass *obj = [[SomeClass alloc] init];
[obj performWork:NO withValue:3];
STAssertEquals(obj.someValue, 2, @"Value was not 2");
}
После повторного строительства и повторного выполнения модульного тестирования, я перезарядил .gcno и .gcda файлов. CoverStory показал, что покрытие изменилось на else
часть метода performWork
. Был один небольшой нюанс, однако:
- мне нужно изменить параметры сборки на
<TargetName>
(а не<TargetNameTest>
, как показано here) для того, чтобы «SomeClass.gcno» и файлы «SomeClass.gcda» будет создана в каталоге...<TargetName>.build/Objects-normal/i386/
.
Еще раз спасибо за вашу помощь!
Спасибо, что ответили. Я смог найти _how_, чтобы найти файлы из [этого ответа] (http://stackoverflow.com/a/4282467/800788). – Meesh