Поблочное тестирование закрытых методов в XCode

Все другие ответы отсутствовали, как твердый это должно сделать это правильно. Можно сделать первый подход сокращения в этом, которое является с точностью до в известной мере, но пока Вы не примете во внимание режимы округления IEEE (и др.), Вы никогда не будете иметь право ответ. Я записал наивные реализации прежде с довольно большим количеством ошибки.

, Если Вы не боитесь математики, я настоятельно рекомендую чтение следующей статьи David Goldberg, , Что Каждый Программист Должен Знать Об Арифметике С плавающей точкой . Вы получите лучшее понимание для того, что продолжается под капотом, и почему биты размечаются как таковые.

Мой лучший совет состоит в том, чтобы запустить с работы atoi реализацию и съехать оттуда. Вы быстро найдете пропавших без вести вещей но несколько взглядов источник strtod и Вы будете на правильном пути (который является долгим, длинным трактом). В конечном счете Вы похвалите , вводят божество здесь , что существуют стандартные библиотеки.

/* use this to start your atof implementation */

/* atoi - christopher.watford@gmail.com */
/* PUBLIC DOMAIN */
long atoi(const char *value) {
  unsigned long ival = 0, c, n = 1, i = 0, oval;
  for( ; c = value[i]; ++i) /* chomp leading spaces */
    if(!isspace(c)) break;
  if(c == '-' || c == '+') { /* chomp sign */
    n = (c != '-' ? n : -1);
    i++;
  }
  while(c = value[i++]) { /* parse number */
    if(!isdigit(c)) return 0;
    ival = (ival * 10) + (c - '0'); /* mult/accum */
    if((n > 0 && ival > LONG_MAX)
    || (n < 0 && ival > (LONG_MAX + 1UL))) {
      /* report overflow/underflow */
      errno = ERANGE;
      return (n > 0 ? LONG_MAX : LONG_MIN);
    }
  }
  return (n>0 ? (long)ival : -(long)ival);
}

63
задан Abizern 9 July 2010 в 22:20
поделиться

4 ответа

Как мне отключить эти предупреждения в Xcode?

Нет.

Могу ли я что-нибудь сделать, чтобы отключить эти предупреждения?

Нет.

Я что-то делаю не так при попытке тестирования «белого ящика»?

Нет.

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

89
ответ дан 24 November 2019 в 16:03
поделиться

Похоже, ответ на другой вопрос есть: Is есть ли способ подавить предупреждения в Xcode?

4
ответ дан 24 November 2019 в 16:03
поделиться

Помните, что на самом деле в Objective-C нет такой вещи, как «частные методы», и не только потому, что это динамический язык. По замыслу Objective-C имеет модификаторы видимости для ivars, но не для методов - не случайно вы можете вызвать любой метод, который вам нравится.

Предложение @Peter - отличное. Чтобы дополнить его ответ, я использовал альтернативу (когда мне не нужен / не нужен заголовок только для частных методов) - объявить категорию в самом файле модульного теста . (Я использую @interface MyClass (Test) в качестве имени.) Это отличный способ добавить методы, которые будут ненужным раздуванием в коде выпуска, например, для доступа к ivars, к которым у тестируемого класса есть доступ к. (Очевидно, что при использовании свойств это не проблема.)

I ' Мы обнаружили, что этот подход позволяет легко выявить и проверить внутреннее состояние, а также добавить методы, предназначенные только для тестирования. Например, в этом файле модульного теста я написал метод -isValid для проверки правильности двоичной кучи. В производственной среде этот метод был бы пустой тратой места, поскольку я предполагаю, что куча допустима - меня это волнует только при тестировании регрессий модульного теста, если я изменяю код.

125
ответ дан 24 November 2019 в 16:03
поделиться

Хотя наличие частного заголовка или определение собственной категории, вероятно, являются более правильными решениями, существует еще одно очень простое решение: преобразовать объект в (id) перед вызовом метода.

3
ответ дан 24 November 2019 в 16:03
поделиться