Добавление дополнительной информации в файл TestResult.xml из NUnit - PullRequest
6 голосов
/ 04 сентября 2008

Я хотел бы иметь возможность добавить «сообщение» в модульный тест, чтобы оно действительно отображалось в файле 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>

Идея состоит в том, что вышеприведенное "сообщение" каким-то образом будет определено внутри самого метода теста (в моем случае, сгенерированного во время выполнения). Есть ли где-нибудь свойство, которое мне не хватает, чтобы иметь возможность сделать что-то подобное?

Ответы [ 4 ]

5 голосов
/ 04 декабря 2008

В последних выпусках NUnit вы можете сделать:

Assert.AreEqual(250.00, destination.Balance, "some message here");

Где «Некоторое сообщение здесь» может быть постоянным сообщением или сообщением, сгенерированным во время выполнения и сохраненным в строковой переменной. Эти сообщения будут появляться только в выходных данных, однако, если утверждение не удается. Обычно, однако, вам нужна только информация о неудачных тестах, поэтому я рекомендую создать строку, добавив каждое предыдущее сообщение, а затем используя эту строковую переменную в качестве сообщения во всех ваших утверждениях. Это позволяет вам получить всю необходимую информацию от неудачных тестов.

2 голосов
/ 05 сентября 2008

Возможно, в этом нет смысла, но как насчет имен тестов, чтобы они указывали, что они тестируют - тогда вам может даже не понадобиться сообщение.

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

0 голосов
/ 12 февраля 2018

Вы можете использовать TestContext, чтобы легко написать любое сообщение, которое вы хотите. Вот как я настроен.

Каждый из моих тестов унаследован от класса testbase. Это удаляет избыточный код.

[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.

0 голосов
/ 02 октября 2008

Я не вижу ничего доступного во время выполнения, но есть несколько функций, которые вы могли бы исследовать: атрибут Описание и атрибут Свойство добавляют текст в выходной файл XML. К сожалению, они оба определены во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...