У меня есть подпись этого метода: List<ITMData> Parse(string[] lines)
ITMData
имеет 35 свойств.
Как бы вы эффективно протестировали такой синтаксический анализатор?
Вопросы:
- Должен ли я загрузить весь файл (могу ли я использовать System.IO)?
- Должен ли я поместить строку из файла в строковую константу?
- Должен ли я проверить одну или несколько строк
- Должен ли я тестировать каждое свойство ITMData или должен тестировать весь объект?
- Как насчет названия моего теста?
ИЗМЕНИТЬ
Я изменил сигнатуру метода на ITMData Parse(string line)
.
Тестовый код:
[Subject(typeof(ITMFileParser))]
public class When_parsing_from_index_59_to_79
{
private const string Line = ".........";
private static ITMFileParser _parser;
private static ITMData _data;
private Establish context = () => { _parser = new ITMFileParser(); };
private Because of = () => { _data = _parser.Parse(Line); };
private It should_get_fldName = () => _data.FldName.ShouldBeEqualIgnoringCase("HUMMELDUMM");
}
ИЗМЕНИТЬ 2
Я все еще не уверен, следует ли мне тестировать только одно свойство для каждого класса. На мой взгляд, это позволяет мне предоставить дополнительную информацию для спецификации, а именно то, что когда я анализирую одну строку от индекса 59 до индекса 79, я получаю fldName. Если я проверю все свойства в одном классе, я потеряю эту информацию. Я преувеличиваю свои тесты?
Мои тесты теперь выглядят так:
[Subject(typeof(ITMFileParser))]
public class When_parsing_single_line_from_ITM_file
{
const string Line = ""
static ITMFileParser _parser;
static ITMData _data;
Establish context = () => { _parser = new ITMFileParser(); };
private Because of = () => { _data = _parser.Parse(Line); };
It should_get_fld??? = () => _data.Fld???.ShouldEqual(???);
It should_get_fld??? = () => _data.Fld???.ShouldEqual(???);
It should_get_fld??? = () => _data.Fld???.ShouldEqual(???);
It should_get_fld??? = () => _data.Fld???.ShouldEqual(???);
It should_get_fld??? = () => _data.Fld???.ShouldEqual(???);
It should_get_fld??? = () => _data.Fld???.ShouldEqual(???);
It should_get_fld??? = () => _data.Fld???.ShouldEqual(???);
...
}
TextReader
, либоIEnumerable<string>
. (Возврат списка тоже подозрительный, если вы можете обойтись ленивым синтаксическим анализом построчно.) - person mqp   schedule 19.08.2011