2014-11-06 1 views
-1

Я использую C#, хотя этот вопрос, вероятно, применим к любому языку.Как избежать написания тех же тестов несколько раз при тестировании методов, которые вызывают другие методы

У меня есть два метода A и B. A делает некоторые вещи и имеет 5 модульных тестов для этого. B в основном то же, что и A, но делает что-то еще. B вызывает A в своей реализации.

Как мне пройти тестирование A и B? Копирование и вставка тестов A, похоже, много ненужного повторения. Если A принадлежит к другому классу, мы могли бы просто издеваться над этим классом и убедиться, что A был вызван, но, видя, что A является частью того же класса, что и B, мы не можем этого сделать здесь.

Каковы наилучшие практики в таком случае?

+0

Слишком мало информации. Вам нужно показать хороший пример кода, точно показывающий отношения между тестами, A и B. См. Http://stackoverflow.com/help/mcve –

ответ

2

Я думаю, что у Оливера есть правильная идея, но я попытаюсь объяснить это, так как кажется, что есть еще какое-то замешательство.

Вы начинаете с написания набора тестов для метода A. Затем, когда вы идете писать набор тестов для B, вы должны тестировать только функциональность B. Значение, когда вы пишете тесты для B, вы должны предположить, что A работает отлично, потому что вы уже протестировали его. И я бы не стал беспокоиться насчет насмешек А в этом случае.

Как побочное замечание, у меня есть подозрение, что A не нужно публиковать. Вызывается он извне класса вообще? Если нет, я бы сделал это частным, а затем написал один комплект тестов, тестирование от A до B.

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

Если бы вы могли привести примерный код, вам было бы легче помочь вам.

0

Так что просто напишите только те тесты, которые вы ожидаете от метода B. Если он внутренне вызывает другой частный или общедоступный метод или, возможно, достигает того же, что и внутренние кодовые клоны (или что-то еще), для вас не имеет значения.

Испытайте только одно испытание. Если у вас есть все ваши тесты для A и все ваши тесты для B, и вы делаете какие-либо нарушения, вы получите информацию из своей тестовой среды.

+0

Итак, скопируйте и вставьте тесты в основном? –

+0

№. Просто напишите тест, что вы ожидаете сделать, позвонив B. Единственное исключение - было бы, если B - метод надмножества A (например, CheckAndDelete() vs. Check()), тогда вы должны * скопировать * тесты , в противном случае просто проверьте только то, что B, как очевидно сделано (получено из имени метода) – Oliver

+0

Ну да. B - это надмножество A, записанное в вопросе. –

Смежные вопросы