2016-04-02 9 views
1

これは主に概念的な質問です。私は(カスタム)TextAreaコントロールからテキストを削除するアルゴリズムを表すいくつかのクラスを持っています。私はそれをテストしたいと思います - アルゴリズムはもちろんです;)。私は私のテスト方法の読みやすさの欠如と心配です:多くのパラメータを持つTestCaseの可読性を向上させる方法

[TestCase(new[] { "some text asdf" }, 5, 0, 9, 0, "some asdf", new int[0])] 
[TestCase(new[] { "some text", "", "totally unimportant texttext that stays" }, 0, 0, 24, 2, "text that stays", new[] { 0, 1, 2 })] 
public void ShouldRemoveSelectedText(string[] lines, int colStart, int lineStart, int colEnd, int lineEnd, string notRemovedText, int[] expectedRemovedLines) { 
    var newLines = algorithm.RemoveLines(lines, new TextPositionsPair { 
     StartPosition = new TextPosition(column: colStart, line: lineStart), 
     EndPosition = new TextPosition(column: colEnd, line: lineEnd) 
    }); 

    Assert.That(newLines.LinesToChange.First().Value, Is.EqualTo(notRemovedText)); 
    CollectionAssert.AreEqual(expectedRemovedLines, newLines.LinesToRemove.OrderBy(key => key)); 
} 

あなたはそれはかなり簡単なテストだ見ることができるように。私はIEnumerablestringと選択領域のアルゴリズムを提供しますが、見ることは難しいです - 一見するとTestCaseパラメータはどこに行くのですか。私は疑問に思っていました - これを行うための "クリーンな"方法がありますか? 追記:私はこの1つのように単純なもののテストを持っていますが、さらに多くのパラメータを提供しなければなりません...念あたりより多くのラインを使用するように単純なアプローチがある

答えて

1

...

[TestCase(new [] { "some text asdf" }, 
      5, 0, 9, 0, 
      "some asdf", 
      new int[0])] 
[TestCase(new [] { "some text", "", "totally unimportant texttext that stays" }, 
      0, 0, 24, 2, 
      "text that stays", 
      new [] {0, 1, 2})] 
public void ShouldRemoveSelectedText(... 

また、あなたはあなたのフィクスチャクラスの静的な配列を参照して、TestCaseSourceを使用することがあります...

TestCaseData[] MySource = { 
    new TestCaseData(new [] { "some text asdf" }, 
        5, 0, 9, 0, 
        "some asdf", 
        new int[0]), 
    new TestCaseData(new [] { "some text", "", "totally unimportant texttext that stays" }, 
        0, 0, 24, 2 
        "text that stays", 
        new [] { 0, 1, 2})}; 

[TestCaseSource("MySource")] 
public void ShouldRemoveSelectedText(.. 

それらは私があれば、私は実際に何をするのかは、あなたのテスト、引数を変更せずに見ることができる最高のオプションですそれは私のコードでした。

テキストバッファをカプセル化するオブジェクトを作成し、選択用オブジェクトを作成します。

class TextBuffer 
{ 
    public string[] Lines; 
    public Selection Selection; 
    ... 
} 

class Selection 
{ 
    public int FromLine; 
    public int FromCol; 
    public int ToLine; 
    public int ToCol; 
    ... 
} 

その後、私は読んで、それはすべての非常に簡単になって、これらのテストプリミティブの観点でテストを書き換えると思います...私はここにクラスを表示していますが、彼らは、構造体であるかもしれません。

関連する問題