Я сомневаюсь, что кто-нибудь порекомендует мне тратить
время для реализации нестабильной
алгоритм сортировки только для проверки
тестовый случай, затем переопределить
Сортировка слиянием. Как часто ты приходишь
через аналогичную ситуацию и что делать
Вы делаете?
Позвольте мне быть тем, кто рекомендует это тогда. :)
Все это - компромисс между временем, которое вы тратите с одной стороны, и рисками, которые вы уменьшаете или смягчаете, а также пониманием, которое вы получаете, с другой стороны.
Продолжая гипотетический пример ...
Если «стабильность» является важным свойством / функцией, и вы не «тестируете тест», делая его неудачным, вы экономите время на выполнении этой работы, но рискуете, что тест будет неправильным и всегда будет зеленый.
Если, с другой стороны, вы «тестируете тест», ломая функцию и наблюдая за ее провалом, вы снижаете риск теста.
И, подстановочный знак, вы можете получить некоторые важные знания. Например, пытаясь закодировать «плохую» сортировку и заставить тест провалиться, вы можете глубже подумать об ограничениях сравнения для сортируемого вами типа и обнаружить, что вы использовали «x == y» в качестве Предикат класса эквивалентности для сортировки, но на самом деле "! (x
Так что я говорю «ошибка» на стороне «потрать дополнительное время, чтобы заставить его выйти из строя, даже если это означает преднамеренное разрушение системы, чтобы на мгновение получить красную точку на экране», потому что в то время как каждый из этих маленьких » отводы »требуют некоторого времени, каждый раз вы экономите огромный пакет (например, упс, ошибка в тесте означает, что я никогда не тестировал самое важное свойство моей системы, или упс , весь наш дизайн для предикатов неравенства испорчен). Это все равно, что играть в лотерею, за исключением того, что в конечном итоге шансы на вашу пользу; каждую неделю вы тратите 5 долларов на билеты и обычно проигрываете, но раз в три месяца вы выигрываете джекпот в 1000 долларов.