#smalltalk #pharo
#smalltalk #pharo
Вопрос:
Просто интересно, можете ли вы пометить метод как ожидающий реализации в pharo, как вы можете сделать в java с помощью «todo»
Мне действительно сложно отслеживать, что завершено в pharo без чего-то подобного
Ответ №1:
Методы, реализация которых все еще находится на рассмотрении, должны отправлять notYetImplemented
сообщение следующим образом:
methodImNotSureHowToImplement
^self notYetImplemented
если невыполненное сообщение все равно будет отправлено, это будет сигнализировать об NotYetImplemented
исключении, которое будет знать селектор-нарушитель, #methodImNotSureHowToImplement
в моем примере.
Обратите также внимание, что это упростит поиск всех методов, которые необходимо реализовать в качестве отправителей #notYetImplemented
.
Реализация #notYetImplemented
проста, благодаря существованию NotYetImplemented
.
notYetImplemented
"Announce that this message is not yet implemented"
NotYetImplemented signalFor: thisContext sender selector
Обратите также внимание, что NotYetImplemented
это один из подклассов SelectorException
, который моделирует несколько ситуаций подобного рода:
SelectorException
NotYetImplemented
PrimitiveFailed
ShouldBeImplemented
ShouldNotImplement
SubclassResponsibility
Ответ №2:
Я нашел решение для этого самостоятельно через 2 дня после того, как спросил об этом, почти случайно, просто используя опцию контекстного меню jump to test method
над методом без какого-либо теста. Pharo автоматически сгенерировал пустой тест с этим:
self flag: #toImplement.
self assert: false`
первая строка, которую можно использовать не только в тестах, дает мне поведение, которого я ожидал, поскольку она автоматически относит содержащий его метод к flags
категории, отмеченной большим "!"
, что позволяет легко проверить, какие методы находятся в ожидании.
Вторая строка приводит к сбою теста и отображается желтым цветом, что довольно полезно, потому что, если она пуста, она пройдет и будет показана зеленым цветом, что, вероятно, заставляет поверить, что это уже сделано, когда это не так. Аналогичного эффекта можно достичь, просто используя self notYetImplemented
Я бы, вероятно, начал делать что-то подобное со своими неполными методами:
MyIncompleteMethod
self flag: #toImplement.
self notYetImplemented.`
Комментарии:
1. И в Pharo 8 мы интегрируем новый инструмент для просмотра флагов 😉
Ответ №3:
вы также можете использовать pragmas для пометки таких методов
Ответ №4:
Поскольку Smalltalk обеспечивает начало гибкой разработки, позвольте мне дать другой ответ. В неудачном модульном тестировании. Поскольку у вас их не должно быть много, это автоматически создает давление для ограничения незавершенной работы (количество открытых #задач).