Простым способом было бы использовать фреймворк PHP, такой как CodeIgniter или Laravel , которые имеют встроенные функции, такие как фильтрация и активная запись, так что вам не нужно беспокоиться об этих нюансах.
junit-дополнения имеет хорошую поддержку его: FileAssert
Это дает Вам исключения как:
junitx.framework.ComparisonFailure: aa Line [3] expected: [b] but was:[a]
Вот один простой подход для проверки, если файлы точно то же:
assertEquals("The files differ!",
FileUtils.readFileToString(file1, "utf-8"),
FileUtils.readFileToString(file2, "utf-8"));
, Где file1
и file2
File
, экземпляры, и FileUtils
от Apache Commons IO .
Не много собственного кода для Вас для поддержания, который всегда является плюс.:) И очень легкий, если Вы уже, оказывается, используете Apache палата общин в Вашем проекте. Но никакие хорошие, подробные сообщения об ошибках как в решение .
метки Редактирование :
Heh, смотря ближе FileUtils
API, существует даже более простой путь :
assertTrue("The files differ!", FileUtils.contentEquals(file1, file2));
В качестве награды, эта версия работает на все файлы, не просто текст.
Я предложил бы использовать Assert.assertThat и hamcrest matcher (junit 4.5 или позже - возможно, даже 4.4).
я закончил бы с чем-то как:
assertThat(fileUnderTest, containsExactText(expectedFile));
, где мой matcher:
class FileMatcher {
static Matcher<File> containsExactText(File expectedFile){
return new TypeSafeMatcher<File>(){
String failure;
public boolean matchesSafely(File underTest){
//create readers for each/convert to strings
//Your implementation here, something like:
String line;
while ((line = expected.readLine()) != null) {
Matcher<?> equalsMatcher = CoreMatchers.equalTo(line);
String actualLine = actual.readLine();
if (!equalsMatcher.matches(actualLine){
failure = equalsMatcher.describeFailure(actualLine);
return false;
}
}
//record failures for uneven lines
}
public String describeFailure(File underTest);
return failure;
}
}
}
}
профессионалы Matcher:
Недостатки:
Если ожидается имеет больше строк, чем фактический, Вы приведете assertEquals к сбою прежде, чем добраться до assertNull позже.
довольно легко зафиксировать хотя:
public static void assertReaders(BufferedReader expected,
BufferedReader actual) throws IOException {
String expectedLine;
while ((expectedLine = expected.readLine()) != null) {
String actualLine = actual.readLine();
assertNotNull("Expected had more lines then the actual.", actualLine);
assertEquals(expectedLine, actualLine);
}
assertNull("Actual had more lines then the expected.", actual.readLine());
}
Вот более полный список File comparator'ов в различных сторонних библиотеках Java: