Подтвердить что ты не робот

Единичное тестирование частного метода - цель C

Я использую GHUnit. Я хочу unit test частные методы и не знаю, как их протестировать. Я нашел много ответов о том, почему и почему не тестировать частные методы. Но не нашел, как их проверить.

Я не хотел бы обсуждать, должен ли я проверять рядовых или нет, но сосредоточимся на том, как его проверить.

Может ли кто-нибудь дать мне пример того, как тестировать закрытый метод?

4b9b3361

Ответ 1

Методы в Objective-C не являются частными. Сообщение об ошибке, которое вы получаете, заключается в том, что компилятор не может проверить, что метод, который вы вызываете, существует, поскольку он не объявлен в открытом интерфейсе.

Способ обойти это состоит в том, чтобы разоблачить частные методы в классе, который сообщает компилятору, что методы существуют.

Итак, добавьте что-то вроде этого в верхнюю часть вашего файла тестового примера:

@interface SUTClass (Testing)

- (void)somePrivateMethodInYourClass;

@end

SUTClass - это фактическое имя класса, для которого вы пишете тесты.

Это сделает ваш частный метод видимым, и вы можете протестировать его без предупреждений компилятора.

Ответ 2

Немного поздно, но я только что попал на поезд TDD.

Частные методы не должны проверяться. Поскольку вы пишете частные методы для поддержки ваших общедоступных методов, таким образом, тестирование ваших публичных методов косвенно проверяет частные методы, которые их поддерживают.

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

Ответ 3

Согласовано с @Lord Zsolt

Также обратите внимание на следующее (из Test-Driven iOS Development ISBN-10: 0-321-77418-3, ISBN-13: 978 -0-321-77418-7)

Тестирование частных методов

Меня часто спрашивали: "Я должен проверить свои частные методы?" или связанный с ним вопрос "Как проверить мои частные методы?" Люди, задающие второй вопрос, предположили, что ответ на первый - "Да" и теперь ищут способ подвергать свои классы приватным интерфейсам в своих тестовых наборах.

Мой ответ основан на наблюдении тонкого факта: вы уже протестировали ваши частные методы. Следуя принципу "красный-зеленый-рефактор" общие для тестовой разработки, вы разработали свои объекты API для работы, которую должны выполнять эти объекты. С указанной работой по результатам тестов - и продолжительное выполнение тестов, гарантирующих вам что вы ничего не сломали - вы можете организовать внутреннюю сантехника ваших классов, как вы сочтете нужным. Ваши личные методы уже проверены, потому что все, что вы делаете, - это поведение рефакторинга, которое у вас уже есть тесты.

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

Ответ 4

Если метод является закрытым, вы никогда не должны его тестировать.

Подумайте об этом. Вы должны проверить поведение и контракт своих методов вместо внутренней реализации