Добавление дополнительной информации в файл TestResult.xml из NUnit
-
09-06-2019 - |
Вопрос
Я хотел бы иметь возможность добавить «сообщение» к модульному тесту, чтобы оно фактически отображалось в файле TestResult.xml, созданном NUnit.Например, это сейчас генерируется:
<results>
<test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" />
</results>
Я хотел бы иметь дополнительный атрибут (или узел в зависимости от обстоятельств), например:
<results>
<test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" message="Tested that some condition was met." />
</results>
Идея состоит в том, что приведенное выше «сообщение» каким-то образом будет определено внутри самого метода тестирования (в моем случае оно будет сгенерировано во время выполнения).Есть ли где-нибудь свойство, которого мне не хватает, чтобы иметь возможность сделать что-то подобное?
Решение
Возможно, здесь не хватает сути, но как насчет того, чтобы назвать тесты так, чтобы они указывали, что они проверяют - тогда вам может даже не понадобиться это сообщение.
Если это окажется абсолютно необходимым, я думаю, вам нужно будет создать свой собственный тест-раннер, который (навскидку) считывал бы дополнительный атрибут из TestCase и присоединял его к выводу.
Другие советы
В последних выпусках NUnit вы можете:
Assert.AreEqual(250.00, destination.Balance, "some message here");
Где «Некоторое сообщение здесь» может быть постоянным сообщением или сообщением, созданным во время выполнения и сохраненным в строковой переменной.Однако эти сообщения появятся в выходных данных только в том случае, если утверждение не выполнено.Однако обычно вам нужна информация только о неудачных тестах, поэтому я рекомендую создавать строку, добавляя каждое предыдущее сообщение, а затем использовать эту строковую переменную в качестве сообщения во всех ваших утверждениях.Это позволяет вам получить всю необходимую информацию из неудачных тестов.
Вы можете использовать TestContext, чтобы легко написать любое сообщение, которое захотите.Вот как я настроен.
Каждый из моих тестов унаследован от класса тестовой базы.Это удаляет избыточный код.
[TestFixture]
public class TestBase
{
public IWebDriver driver;
//[OneTimeSetUp] and [OneTimeTearDown] go here if needed
[SetUp]
public void Setup(){
driver = Shortcuts.SetDriver("my browser");
}
[TearDown]
public void TearDown()
{
driver.Quit();
Comment("@Result: " + TestContext.CurrentContext.Result.Outcome.ToString());
}
public void Comment(string _comment)
{
TestContext.Out.WriteLine(_comment);
}
public void Error(string _error)
{
TestContext.Error.WriteLine(_error);
}
}
Вы можете видеть, что две нижние функции записывают любое сообщение или ошибку в указанный TestContext.Это также будет хорошо работать с парализуемыми тестами.
Затем я могу использовать этот родительский класс для настройки своих тестов и записи на консоль.
//Role Management
public class RoleManagementTests : TestBase
{
[TestCase]
public void RoleManagement_7777_1()
{
Comment("Expected: User has the ability to view all roles in the system.");
//Test goes here
}
}
Теперь вы можете увидеть результаты в выходных данных (Visual Studio) и в файле TestResult.xml с помощью NUnit Console Runner.