При кодировании использования TDD я создаю API открытого интерфейса для объекта. Это означало бы в Вашем примере, что мой интерфейс, который реализации класса будут только иметь push()
, pop()
и isEmpty()
.
Однако тестирование этих методов путем вызова их не является модульными тестами в себе (больше на этом в конце этого сообщения) , так как они, скорее всего, тестируют сотрудничество нескольких внутренних методов, которые вместе приводят к желаемому результату, и это - то, о чем вопрос: те методы должны быть частными?
Мой ответ не, используйте protected
(или эквивалент его на языке по Вашему выбору) для тех вместо private
, что означает, что, если Ваш проект и тестовые АНГЛИЧАНЕ структурированы точно так же, класс набора тестов видит в фактическом классе, так как они находятся фактически в той же папке. Их можно считать модульными тестами: Вы тестируете функциональные блоки самого класса, не их сотрудничество.
Что касается тестирования отдельных методов интерфейса/API, конечно, важно сделать это также, и я не подвергаю сомнению тот факт, что, те однако падают где-нибудь между туманной строкой поблочное тестирование и приемочные испытания .
, По-моему, самая важная вещь помнить вот состоит в том, что модульные тесты говорят Вам, если метод неправильно себя ведет, приемочные испытания говорят, неправильно себя ведет ли сотрудничество нескольких методов/классов, и интеграционное тестирование говорит, неправильно себя ведет ли сотрудничество нескольких систем.
Нет реального способа сделать это через опубликованный API, однако я думаю, что в этом случае можно угадать подпредставление UIScrollView
, если вы убедитесь, что ваш приложение не аварийно завершает работу, если вы не можете найти UIScrollView
:
UIView* scrollView = [webView.subviews objectAtIndex:0];
if ([scrollView isKindOfClass:[UIScrollView class]) {
[((UIScrollView*)scrollView) flashScrollIndicators];
} else {
// If Apple changes the view hierarchy you won't get
// a flash, but that doesn't matter too much
}
РЕДАКТИРОВАТЬ: Вышеупомянутое не будет работать, потому что первое подвид UIWebView
- это UIScroller
, а не UIScrollView
(моя память могла сыграть со мной злую шутку). Может быть, попробуйте следующее?
UIView* uiScroller = [webView.subviews objectAtIndex:0];
if ([uiScroller respondsToSelector:@selector(displayScrollerIndicators)]) {
[((UIScrollView*)uiScroller) performSelector:@selector(displayScrollerIndicators)];
} else {
// If Apple changes the view hierarchy you won't get
// a flash, but that doesn't matter too much
}