Каждый компонент проходит свой жизненный цикл и является независимым независимо от того, отображаются ли они в компоненте с состоянием или без состояния. Также компонент с состоянием в компоненте без состояния не влияет на родительский компонент.
Единственное предостережение в том, что компонент выше в иерархии останавливает рендеринг, реализуя shouldComponentUpdate
или расширяя PureComponent
(не ре-рендеринг, когда нет изменений в реквизите или состоянии) или by using React.memo
функциональные компоненты. Методы или обновления жизненного цикла детей также не будут вызваны.
Вот что я в итоге сделал (тяжелая работа была сделана DBUnit ):
/**
* Compares the data in the two Excel files represented by the given input
* streams, closing them on completion
*
* @param expected can't be <code>null</code>
* @param actual can't be <code>null</code>
* @throws Exception
*/
private void compareExcelFiles(InputStream expected, InputStream actual)
throws Exception
{
try {
Assertion.assertEquals(new XlsDataSet(expected), new XlsDataSet(actual));
}
finally {
IOUtils.closeQuietly(expected);
IOUtils.closeQuietly(actual);
}
}
Это сравнивает данные в двух файлах без риска ложной отрицательные стороны любых нерелевантных метаданных, которые могут отличаться. Надеюсь, это кому-то поможет.
Простое сравнение файлов может быть легко выполнено с использованием контрольной суммы (например, MD5) или просто чтения обоих файлов.
Однако, поскольку файлы Excel содержат множество метаданных, файлы, вероятно, никогда не будут идентичный побайтный, как указал Джеймс Берджесс. Так что вам понадобится другой вид сравнения для вашего теста.
Я бы порекомендовал каким-то образом сгенерировать "каноническую" форму из файла Excel, т.е. прочитать сгенерированный файл Excel и преобразовать его в более простой формат (CSV или что-то подобное. ), который сохранит только ту информацию, которую вы хотите проверить. Затем вы можете использовать «каноническую форму» для сравнения с ожидаемым результатом (также, конечно, в канонической форме).
Apache POI может быть полезен для чтения файла.
BTW: чтение всего файла проверка его правильности обычно не считается модульным тестом. Это интеграционный тест ...
Вы можете использовать javaxdelta, чтобы проверить, совпадают ли два файла. Его можно найти здесь:
Пожалуйста, посмотрите сайт для сравнения двоичных файлов, http://www.velocityreviews.com/forums/t123770-re-java -код-для-определения-двоичного-файла-равенства.html
Тигр
Может быть ... сравнить дайджесты MD5 каждого файла? Я уверен, что есть много способов сделать это. Вы можете просто открыть оба файла и сравнить каждый байт.
РЕДАКТИРОВАТЬ: Джеймс заявил, что формат XLS может иметь различия в метаданных. Возможно, вам стоит использовать тот же интерфейс, который вы использовали для создания файлов xls, чтобы открыть их и сравнить значения от ячейки к ячейке?
Только что обнаружил, что что-то есть в FileUtils commons-io. Спасибо за другие ответы.
Вы можете использовать Beyond Compare 3 , который может быть запущен из командной строки и поддерживает различные способы сравнения файлов Excel, в том числе: