私はこのメソッドシグネチャを持っています:List<ITMData> Parse(string[] lines)
ITMData
35のプロパティがあります。
このようなパーサーをどのように効果的にテストしますか?
質問:
- ファイル全体をロードする必要がありますか(System.IOを使用できますか)?
- ファイルの行を文字列定数に入れる必要がありますか?
- 1つ以上の行をテストする必要があります
- 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
クラスごとに1つのプロパティのみをテストする必要があるかどうかはまだわかりません。私の意見では、これにより、仕様に関するより多くの情報を提供できます。つまり、インデックス59からインデックス79までの1行を解析すると、fldNameが取得されます。1つのクラス内のすべてのプロパティをテストすると、この情報が失われます。テストを過剰に指定していますか?
私のテストは次のようになります。
[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(???);
...
}