Изменить - с Apache Commons 2.1 правильный способ сделать это:
FileUtils.writeStringToFile (файл, «String to append», true);
Я адаптировал решение @ Kip, чтобы включить правильное закрытие файла, наконец: public static void appendToFile (String targetFile, String s) throws IOException {appendToFile (новый файл (targetFile), с); } public static void appendToFile (File targetFile, String s) throws IOException {PrintWriter out = null; try {out = new PrintWriter (новый BufferedWriter (новый FileWriter (targetFile, true))); out.println (ы); } finally {if (out! = null) {out.close (); }}}
Я согласен с остальными, что в целом вы хотите избежать доступа к частным лицам в своих тестах, но для случаев, когда вам нужно, вы можете использовать g0 для чтения и записи свойства .
Вы также можете использовать Assert::assertAttributeEquals('value', 'propertyName', $object)
.
См. https://github.com/sebastianbergmann/phpunit/blob/3.7/PHPUnit/Framework/Assert.php#L490
Assert::readAttribute($actualClassOrObject, $actualAttributeName)
, который используется Assert::assertAttributeEquals()
– D. Schreier
5 July 2018 в 11:57
Я просто хочу отметить одно. Давайте забудем о частных полях на мгновение и сосредоточимся на том, что заботит клиент вашего класса. Ваш класс предоставляет контракт, в данном случае - возможность изменять и получать имя (через getter и setter). Ожидаемая функциональность проста:
setName
до "Gerald"
, я ожидаю получить "Gerald"
, когда я вызываю getName
Вот и все. Клиент не будет (ну, не стоит!) Заботиться о внутренней реализации. Используете ли вы имя частного поля, hashset или называете веб-сервис через динамически сгенерированный код - не имеет значения для клиента. ошибка , которую вы в настоящее время испытываете, с точки зрения пользователя - вообще не является ошибкой.
Может ли PHPUnit проверять частные переменные - я не знаю.
Редактировать (в ответ на комментарий):
Я понимаю ваши опасения по поводу возможного воздействия внутреннего состояния, однако я не понимаю Не думаю, что модульное тестирование - это правильный инструмент для решения этого. Вы можете придумать множество возможных сценариев, как что-то может сделать что-то еще , которое не было запланировано. Единичные тесты ни в коем случае не вылечиваются для всех и не должны использоваться как таковые.