tim_yates и kriegaex - большие звери в джунглях, когда дело доходит до хорошего и плохого Спока, или тестирование в стиле TDD в целом ... они не раз (справедливо) разделяли мои вопросы так, как они это делают здесь, в основном на основе тестирования кода, а не реализации.
Иногда это трудно, хотя. Возможно, могут быть случаи, когда вы захотите проверить вызов super.doSomething()
. Я просто собираю, используя TDD, уже сделав «всплеск», в котором я бросился вперед без тестирования, редактор для TreeTableView
. «Шип» можно увидеть здесь . В конструктивном комментарии к моему ответу kleopatra посоветовала мне проверить (т.е. вставить if
в код приложения), чтобы убедиться, что super.startEdit()
действительно начал редактирование ячейки, прежде чем идти дальше, поэтому в данном случае это недостаточно проверить «побочный эффект» super.startEdit()
, поскольку isEditing()
теперь возвращает true
. Вам действительно нужно знать, что startEdit()
вашего класса на самом деле не делает ничего больше и меньше, чем звонить super.startEdit()
.
Однако я не верю, что это можно сделать, и tim_yates или kriegaex почти наверняка сказали бы как вы могли бы сделать это, если бы это было возможно.
Поэтому мое предлагаемое TDD решение было бы примерно таким:
def 'super start edit should be called if cell is not empty'(){
given:
// NB has to be GroovySpy because isEmpty() is final
DueDateEditor editor = GroovySpy( DueDateEditor ){
isEmpty() >> false
}
when:
editor.startEdit()
then:
1 * editor.callSuperStartEdit()
}
class DueDateEditor extends TreeTableCell {
@Override
void startEdit(){
if( ! isEmpty() ) {
// this is the line you have to add to make the test pass
callSuperStartEdit()
}
}
def callSuperStartEdit(){
super.startEdit()
}
}
Я думаю, что вы должны "породить" искусственное целевой метод, поскольку, в общем, побочного эффекта нет совсем!
PS Я на самом деле параметризую этот тест так, чтобы он возвращал от true
до isEmpty()
во втором вызове, и потребовал, чтобы метод NOT быть вызванным в этом случае.