Под «выходным потоком» я подразумеваю любой объект, который получает последовательность байтов, символов или чего-то еще. Итак, java.io.OutputStream, а также java.io.Writer, метод writeCharacters javax.xml.stream.XMLStreamWriter и так далее.
Я пишу фиктивные тесты для класса, основной функцией которого является запись потока данных в один из них (например, в XMLStreamWriter).
Проблема в том, что поток данных записывается последовательностью вызовов метода записи, но важны не вызовы, а данные. Например, для XMLStreamWriter out
это:
out.writeCharacters("Hello, ");
out.writeCharacters("world!");
эквивалентны этому:
out.writeCharacters("Hello, world!");
На самом деле не имеет значения (для моих целей), что происходит. Будет определенная последовательность вызовов, но мне все равно, что это такое, поэтому я не хочу писать ожидания для этой конкретной последовательности. Я просто хочу ожидать, что определенный поток данных будет записан каким-либо образом.
Одним из вариантов может быть переход на тестирование по состоянию. Я мог бы накапливать данные в буфере и делать по ним утверждения. Но поскольку я пишу XML, это означало бы создание довольно сложных и уродливых утверждений. Насмешки кажутся гораздо лучшим способом решения более крупной проблемы написания XML.
Итак, как мне сделать это с макетом?
Я использую Moxie для насмешек, но мне интересно узнать о подходах с любыми насмешками библиотека.