Roo*_*ian 5 c# parsing unit-testing flat-file mspec
我有这个方法签名: List<ITMData> Parse(string[] lines)
ITMData 有35个房产.
你会如何有效地测试这样的解析器?
问题:
编辑
我将方法签名更改为 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");
}
Run Code Online (Sandbox Code Playgroud)
编辑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(???);
...
}
Run Code Online (Sandbox Code Playgroud)
小智 2
如果我遇到这样的问题,我通常会这样做:
提前声明一个简短的免责声明:我认为我更愿意走“集成测试”或“作为一个整体测试解析器”路线,而不是测试单独的行。过去,我不止一次面临过这样的情况:大量实现细节泄漏到我的测试中,并迫使我在更改实现细节时经常更改测试。我猜是过度规范的典型案例;-/
| 归档时间: |
|
| 查看次数: |
850 次 |
| 最近记录: |