написание тестовых примеров java testng - PullRequest
1 голос
/ 29 сентября 2011

Я начинаю с тестов Java и testng.

Мне нужно написать класс, который считывает данные из файла и создает структуру данных в памяти и использует эту структуру данных для дальнейшей обработки.Я хотел бы проверить, правильно ли заполняется этот DS.Это вызвало бы сброс DS в файл и затем сравнение входного файла с сохраненным файлом.Есть ли какой-либо testNG assert для сопоставления файлов?Это обычная практика?

Ответы [ 5 ]

3 голосов
/ 29 сентября 2011

Я думаю, что было бы лучше сравнить сами данные, а не записанные данные.

Поэтому я бы написал метод в классе, чтобы вернуть эту структуру данных (давайте назовем ее getDataStructure()), а затемнаписать модульный тест для сравнения с правильными данными.

Для этого нужен только правильный метод equals() в вашем классе структуры данных и сделать:

Assert.assertEquals(yourClass.getDataStructure(), correctData);

Конечно, если вам нужно написатьиз структуры данных в файл, вы можете проверить сериализацию и десериализацию отдельно.

1 голос
/ 29 сентября 2011

Сравнение / сопоставление файлов может быть извлечено в служебный метод или что-то в этом роде. Если вам нужно только для тестирования есть дополнения для jUnit http://junit -addons.sourceforge.net / junitx / рамки / FileAssert.html

Если вам нужно сравнить файлы вне среды тестирования, вы можете использовать эту простую функцию

    public static boolean fileContentEquals(String filePathA, String filePathB) throws Exception {
    if (!compareFilesLength(filePathA, filePathB)) return false;

    BufferedInputStream streamA = null;
    BufferedInputStream streamB = null;
    try {
        File fileA = new File(filePathA);
        File fileB = new File(filePathB);

        streamA = new BufferedInputStream(new FileInputStream(fileA));
        streamB = new BufferedInputStream(new FileInputStream(fileB));

        int chunkSizeInBytes = 16384;
        byte[] bufferA = new byte[chunkSizeInBytes];
        byte[] bufferB = new byte[chunkSizeInBytes];

        int totalReadBytes = 0;
        while (totalReadBytes < fileA.length()) {
            int readBytes = streamA.read(bufferA);
            streamB.read(bufferB);

            if (readBytes == 0) break;

            MessageDigest digestA = MessageDigest.getInstance(CHECKSUM_ALGORITHM);
            MessageDigest digestB = MessageDigest.getInstance(CHECKSUM_ALGORITHM);

            digestA.update(bufferA, 0, readBytes);
            digestB.update(bufferB, 0, readBytes);

            if (!MessageDigest.isEqual(digestA.digest(), digestB.digest()))
            {
                closeStreams(streamA, streamB);
                return false;
            }

            totalReadBytes += readBytes;
        }
        closeStreams(streamA, streamB);
        return true;
    } finally {
        closeStreams(streamA, streamB);
    }
}

public static void closeStreams(Closeable ...streams) {
    for (int i = 0; i < streams.length; i++) {
        Closeable stream = streams[i];
        closeStream(stream);
    }
}
public static boolean compareFilesLength(String filePathA, String filePathB) {
    File fileA = new File(filePathA);
    File fileB = new File(filePathB);

    return fileA.length() == fileB.length();
}
private static void closeStream(Closeable stream) {
    try {
        stream.close();
    } catch (IOException e) {
        // ignore exception
    }
}

Ваш выбор, но лучше иметь класс утилит с такой функциональностью, которую можно использовать повторно.

Удачи и веселья.

0 голосов
/ 29 сентября 2011

сравнить байты, загруженные из файловой системы, и байты, которые вы собираетесь записать в файловую систему

псевдокод

byte[]  loadedBytes = loadFileContentFromFile(file) // maybe apache commons IOUtils.toByteArray(InputStream input) 

byte[]  writeBytes = constructBytesFromDataStructure(dataStructure)

Assert.assertTrue(java.util.Arrays.equals(writeBytes ,loadedBytes));
0 голосов
/ 29 сентября 2011

Если этот DS - простой Java Bean.тогда вы можете использовать EqualsBuilder от Apache Commons для сравнения 2 объектов.

0 голосов
/ 29 сентября 2011

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

(с использованием JUnit4)

@Test
public void testProcessingDoesWhatItShould() {
    final DataStructure original = readFromFile(filename);
    final DataStructure actual = doTheProcessingYouNeedToDo(original);
    final DataStructure expected = generateMyExpectedResult();

    Assert.assertEquals("data structure", expected, actual);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...