XML-данные для модульного тестирования - PullRequest
0 голосов
/ 26 августа 2009

Мы собираемся выполнить большое количество данных через некоторые модульные тесты. Мы хотели бы определить это в электронной таблице Excel или XML-документе.

Есть ли возможность получить структуру модульного тестирования для загрузки этих данных в качестве входных данных и ожиданий.

Я могу предвидеть, что возникнут проблемы с перехватом исключений. Любые комментарии по этому вопросу также приветствуются.

Ответы [ 4 ]

1 голос
/ 07 ноября 2009

Потратив всего несколько часов на поиск того, как это сделать (поскольку в данные встроено некоторое форматирование, поэтому я не могу использовать файл CSV), мне удалось понять, как использовать XML с MSTest.

Это небольшой образец. Надеюсь, это поможет.

Предположим, у вас есть простая библиотека классов:

public class GetStrings
{
    public string RichardIII(string lookup)
    {
        string results;
        switch(lookup)
        {
            case "winter":
                {
                    results =
                        "Now is the winter of our discontent\nMade glorious summer by this sun of York;\nAnd all the clouds that lour'd upon our house\nIn the deep bosom of the ocean buried. ";
                    break;
                }
            case "horse":
                {
                    results =
                        "KING RICHARD III \nA horse! a horse! my kingdom for a horse!\n\nCATESBY \n\"Withdraw, my lord; I'll help you to a horse.\"";
                    break;
                }
                default:
                results = null;
                break;
        }
        return results;
    }
}

Итак, юнит-тест, который проверит часть этого метода, будет выглядеть так:

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\TestStrings.xml", "Test", DataAccessMethod.Sequential), DeploymentItem("GetStringsTest\\TestStrings.xml"), TestMethod]
public void RichardIIITest()
{
    GetStrings target = new GetStrings(); 

    string lookup = TestContext.DataRow["find"].ToString();
    string expected = TestContext.DataRow["expect"].ToString();
    if (expected == "(null)")
        expected = null; 

    string actual = target.RichardIII(lookup);
    Assert.AreEqual(expected, actual);
}

XML-файл TestStrings.xml выглядит следующим образом:

<TestStrings>
    <Test find="winter" expect="Now is the winter of our discontent&#10;Made glorious summer by this sun of York;&#10;And all the clouds that lour'd upon our house&#10;In the deep bosom of the ocean buried. "/>
    <Test find="horse" expect="KING RICHARD III &#10;A horse! a horse! my kingdom for a horse!&#10;&#10;CATESBY &#10;&#34;Withdraw, my lord; I'll help you to a horse.&#34;"/>
    <Test find="blah blah" expect="(null)"/>
</TestStrings>
1 голос
/ 26 августа 2009

nUnit - это всего лишь POCO, поэтому вы можете настроить его так, как вам нравится, с использованием классов .NET. Поскольку это может быть много данных, я, вероятно, установил бы их в TestFixtureSetUp, который запускается один раз для всего пакета:

[TestFixture]
public class Foo{

  private XmlDocument doc;
  private BarClass bar;

 [TestFixtureSetUp]
  public void FixtureSetUp(){
     doc = new XmlDocument();
     doc.Load("c:\file.xml");
  }

  [SetUp]
  public void SetUp(){
      BarClass = new BarClass();
  }

  [Test]
  public void TestX(){
     Assert.That(BarClass.DoSOmething(doc), Is.Baz);
  }

}
0 голосов
/ 26 августа 2009

Для MSTest взгляните на атрибут DataSource .

0 голосов
/ 26 августа 2009

MBUnit может запускать тесты из источников данных, таких как документы XML или базы данных.

...