Класс не нужно было бы экспортировать, когда вы создаете исполняемый файл вашего приложения ... но опять же, для меня это относится к категории "прыжков через обручи". Насколько «чистым» действительно должен быть код приложения?

темаБрайан (единственный отвечающий) говорит: «Ваш код должен быть написан таким образом, чтобы он не зависел от тестирования»Единственный комментарий гласит: «Ваш код определенно не должен переходить в глобальный« Я проверяю флаг ».».

Но ни одна из причин не дает, и я бы

действительно хотел бы услышать некоторые рациональные мысли по этому вопросу. Было бы очень легко (особенно если учесть тот факт, что многие тесты имеют частный доступ к классам приложения), чтобы получить доступ к заданному классу приложения и установить логическое выражение «это тест, а не запуск».Все виды вещей, которые я обнаруживаю, прыгая через обручи (впрыскиваемые надруганные личные поля и т. Д.), Могут стать более легкими для выполнения.

Также очевидно, что если вы зайдете слишком далеко, это может иметь катастрофические последствия ... но как один из многих инструментов в арсенале тестирования программного обеспечения, почему эта концепция встречает такое осуждение?

Ответ Мик Мнемоник:

Вот тривиальный пример того, как это могло бы помочь, если вы на самом деле создаете новый экземпляр класса в середине метода и присваиваете его частному полю: в этом случае mocks частного поля не помогут, потому что вы заменяете частный поле. Но на самом деле создание реального объекта может быть очень дорогостоящим: вы можете заменить его облегченной версией при тестировании.

Фактически я столкнулся с такой ситуацией вчера ... и мое решение состояло в том, чтобы создать новый закрытый для пакета метод с именем createXXX () ... чтобы я мог его высмеять. Но это, в свою очередь, противоречит изречению «не создавай методы, которые бы просто подходили для твоих испытаний»!

TL; DR: производственный код не должен зависеть от тестов. Это должно быть наоборот. (В противном случае ваши тесты могут повлиять на поведение вашего производственного кода, и это не то, что вам бы хотелось)

Ответы на вопрос(3)

Ваш ответ на вопрос