Есть ли какая-то особая поддержка, когда вы приходите тестировать обратные вызовы с NUnit? Или какая-то «лучшая практика», которая лучше моего решения ниже?
Я только начал писать некоторые тесты и методы, поэтому у меня все еще есть полный контроль - однако я думаю, что это может раздражать, если есть более эффективные способы тщательного тестирования обратных вызовов, особенно если сложность возрастает. Вот простой пример того, как я сейчас тестирую:
В тестируемом методе используется делегат, который вызывает функцию обратного вызова, например, как только в потоке обнаруживается новый элемент xml. Для целей тестирования я передаю делегату метод NewElementCallback
и сохраняю содержимое аргументов в некоторых свойствах тестовых классов при вызове функции. Эти свойства я использую для утверждения. (Конечно, они сбрасываются в настройках теста)
[Test]
public void NewElement()
{
String xmlString = @"<elem></elem>";
this.xml.InputStream = new StringReader(xmlString);
this.xml.NewElement += this.NewElementCallback;
this.xml.Start();
Assert.AreEqual("elem", this.elementName);
Assert.AreEqual(0, this.elementDepth);
}
private void NewElementCallback(string elementName, int elementDepth)
{
this.elementName = elementName;
this.elementDepth = elementDepth;
}