Я хочу проверить две службы:
- служба, которая создает имя файла
- служба, которая записывает некоторые данные в файл, предоставленный 1-й службой
Во-первых, я строю некоторую сложную файловую структуру (например, {user}/{date}/{time}/{generatedId}.bin
)
Во-вторых, я записываю данные в файл, переданный первой службой (1-я служба вызывает 2-ю службу)
Как я могу протестировать обе службы с помощью имитаций без каких-либо реальных операций ввода-вывода?
Например:
1-я служба:
public class DefaultLogService implements LogService
{
public void log(SomeComplexData data)
{
serializer.write(new FileOutputStream(buildComplexFileStructure()), data);
or
serializer.write(buildComplexFileStructure(), data);
or
serializer.write(new GenericInputEntity(buildComplexFileStructure()), data);
}
private ComplextDataSerializer serializer; // mocked in tests
}
2-я служба:
public class DefaultComplexDataSerializer implements ComplexDataSerializer
{
void write(InputStream stream, SomeComplexData data) {...}
or
void write(File file, SomeCompexData data) {...}
or
void write(GenericInputEntity entity, SomeComplexData data) {...}
}
В первом случае мне нужно передать FileOutputStream, который создаст файл (т.е. я не могу протестировать 1-ю службу)
Во втором случае мне нужно передать File.Что я могу сделать во втором сервисном тесте, если мне нужно проверить данные, которые будут записаны в указанный файл?(я не могу проверить 2-й сервис)
В третьем случае я думаю, что мне нужен какой-то универсальный объект ввода-вывода, который обернет File.Может быть, есть какое-то готовое решение для этой цели?