Я пишу синтаксический анализатор аргументов программы, просто для улучшения TDD, и я столкнулся со следующей проблемой.Скажем, мой парсер определен следующим образом:
class ArgumentsParser {
public ArgumentsParser(ArgumentsConfiguration configuration) {
this.configuration = configuration;
}
public void parse(String[] programArguments) {
// all the stuff for parsing
}
}
, и я предполагаю, что реализация ArgumentsConfiguration выглядит следующим образом:
class ArgumentsConfiguration {
private Map<String, Class> map = new HashMap<String, Class>();
public void addArgument(String argName, Class valueClass) {
map.add(argName, valueClass);
}
// get configured arguments methods etc.
}
Это мой текущий этап.На данный момент в тесте я использую:
@Test
public void shouldResultWithOneAvailableArgument() {
ArgumentsConfiguration config = prepareSampleConfiguration();
config.addArgument("mode", Integer.class);
ArgumentsParser parser = new ArgumentsParser(configuration);
parser.parse();
// ....
}
Мой вопрос, если такой способ является правильным?Я имею в виду, нормально ли использовать реальную ArgumentsConfiguration в тестах?Или я должен издеваться над этим?Реализация по умолчанию (текущая) довольно проста (только завернутая в Map), но я представляю, что она может быть более сложной, как выборка конфигурации из источника данных.Тогда было бы естественно издеваться над таким «дорогим» поведением.Но какой здесь предпочтительный способ?
РЕДАКТИРОВАТЬ: Может быть, более ясно: я должен насмехаться над ArgumentsConfiguration даже без написания какой-либо реализации (просто определить ее публичные методы), использовать mock для тестирования и позже разобраться с реальной реализацией (-ями),или я должен использовать самый простой в тестах, и пусть они косвенно освещают эту реализацию.Но если да, то как насчет тестирования другой реализации Конфигурации, представленной позже?