Что означает тестовый символ XCode 5 rT?

У меня есть 2 тестовых класса в проекте XCode 5:

ABCDataModelTests.{h,m}

- (void)testAlwaysPassing { ... }

ABCDataModelListColorsTests.m, который наследуется от ABCDataModelTests.

- (void)testNumberOfListColorsGreaterThan7 { ... }

Когда я запустил тест, я заметил, что под тестами подкласса есть символ «rT», как показано на рисунке.

Что означает "рТ"? Обратите внимание, что подкласс наследует тестовый метод testAlwaysPassing.

Я ничего не могу найти в документации Apple для «Новых функций в XCode 5/5.0.1». Есть ли какая-либо документация о том, что означают все символы?

введите здесь описание изображения


person platypus    schedule 31.10.2013    source источник
comment
Значок rT появляется у меня, когда я запускаю тесты на устройстве. Они не появляются при запуске тестов в симуляторе.   -  person Evgenii    schedule 25.09.2014


Ответы (5)


Я нашел эту информацию на некоторых форумах:

Стандартный способ работы в SenTestingKit/OCUnit/XCTest — объявить тесты в коде. Если вы это сделаете, Xcode обнаружит их статически (т. е. не во время выполнения), используя индекс. Как только Xcode обнаруживает эти тесты, они отображаются в навигаторе тестов со значком «t». Все идет нормально.

Теперь фреймворки SenTestingKit/OCUnit/XCTest также позволяют создавать тесты «на лету» во время выполнения. Некоторые из наших пользователей подходят к этой возможности творчески, возможно, для обертывания внешней системы тестирования или для создания тестов для представления динамического набора данных. Xcode не может обнаружить эти тесты статически и узнает об их существовании только тогда, когда они возвращают результаты во время выполнения теста. При обнаружении они будут отображаться в навигаторе тестов со значком «rT». «rT» — это сокращение от «тестов, обнаруженных во время выполнения».

Ну наконец то. Если в вашем проекте есть что-то неправильное/необычное, что мешает завершению индексации или правильному анализу ваших тестовых классов, то ваши тесты не будут обнаружены статически. Вы все еще можете успешно собрать и запустить их, и в этом случае Xcode в конечном итоге будет рассматривать их как тесты, обнаруженные во время выполнения, и присвоит им значок «rT».

person voidref    schedule 07.11.2013

Интересный. Меня очень раздражала та же проблема с тестовым классом, который я создал, продублировав другой файл в среде IDE. Раньше я дублировал другие тестовые файлы, так что это не проблема.

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

Контекстное меню в проводнике тестов предлагает тест «testBlah», который, кажется, выполняет тест.

Выход из XCode, удаление папки xcuserdata и повторная перестройка привели к тому, что тест снова распознался как обычный тест.

Я получаю напоминания о старых версиях Visual Studio, которые имели проблемы с кэшированием и требовали регулярного удаления данных локального контекста!

person Andy Dent    schedule 15.11.2013
comment
Когда все ваши тесты начинают показывать значок rT, это обычно означает, что ваша индексация работает неправильно. Удаление xcuserdata не требуется. Обычно достаточно удалить папку производных данных. Чтобы удалить производные данные, откройте органайзер, выберите свой проект и нажмите кнопку Удалить.... См. также этот ответ. - person everyday productive; 20.12.2013
comment
Xcode 7.3.1. Я обнаружил, что мне пришлось удалить папку xcuserdata, поскольку удаления производных данных было недостаточно. - person Rocket Garden; 21.08.2016

Я согласен с тем, что сказал @everyday_productive

«rT» обычно означает что-то не так с индексацией, чтобы исправить это, перейдите в терминал и введите следующее:

$ cd ~/Library/Developer/Xcode/

Убедитесь, что ваш Xcode завершен, затем удалите папку «Производные данные».

person Jason W    schedule 23.05.2016

Удаление производных данных не помогло мне избавиться от запуска этих тестов. Итак, я создал небольшую категорию на XCTestCase, и это сработало:

#import "XCTestCase+TestCaseSwizzling.h"
@import ObjectiveC.runtime;

static NSMutableSet* alreadyRunTests = nil;

@implementation XCTestCase (TestCaseSwizzling)

+ (void)load
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{

    alreadyRunTests = [NSMutableSet set];

    Class class = [self class];

    SEL originalSelector = @selector(invokeTest);
    SEL swizzledSelector = @selector(swizzledInvokeTest);

    Method originalMethod = class_getInstanceMethod(class, originalSelector);
    Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);

    method_exchangeImplementations(originalMethod, swizzledMethod);
});
}

- (void)swizzledInvokeTest
{
     NSString* selectorString = NSStringFromSelector(self.invocation.selector);

     if (![alreadyRunTests containsObject:selectorString])
     {
         [alreadyRunTests addObject:selectorString];
         [self swizzledInvokeTest];
     }
 }

 @end
person Andrey Chernukha    schedule 10.08.2016

Удалил ссылки на файлы из проекта, потом добавил их заново.

person zs2020    schedule 30.01.2021