Pergunta

Gostaria de poder adicionar uma "mensagem" a um teste de unidade, de forma que ela realmente apareça no arquivo TestResult.xml gerado pelo NUnit.Por exemplo, isso é gerado atualmente:

<results>
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" />
</results>

Eu gostaria de poder ter um atributo adicional (ou nó, conforme o caso), como:

<results>
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" message="Tested that some condition was met." />
</results>

A idéia é que a "mensagem" acima seja de alguma forma definida dentro do próprio método de teste (no meu caso, gerada em tempo de execução).Existe alguma propriedade em algum lugar que estou faltando para poder fazer algo assim?

Foi útil?

Solução

Isso pode não ser o principal, mas que tal nomear os testes para que indiquem o que testam - então você pode nem precisar da mensagem.

Se for absolutamente necessário, acho que você precisará produzir seu próprio testrunner que (na minha cabeça) leria um atributo adicional do TestCase e o anexaria à saída.

Outras dicas

Nas versões recentes do NUnit você pode fazer:

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

Onde "Alguma mensagem aqui" pode ser uma mensagem constante ou uma mensagem gerada em tempo de execução e armazenada em uma variável string.Essas mensagens só aparecerão na saída se a asserção falhar.Normalmente, entretanto, você só precisa de informações sobre testes que falharam, então recomendo construir uma string adicionando cada mensagem anterior e depois usar essa variável de string como a mensagem em todas as suas afirmações.Isso permite que você obtenha todas as informações necessárias sobre testes reprovados.

Não consigo ver nada disponível em tempo de execução, mas há alguns recursos que você pode querer investigar:o Descrição atributo e o Propriedade atributo ambos adicionam texto ao arquivo de saída XML.Infelizmente, ambos são definidos em tempo de compilação.

Você pode usar o TestContext para escrever facilmente qualquer mensagem desejada.Aqui está como estou configurado.

Cada um dos meus testes é herdado de uma classe testbase.Isso remove código redundante.

[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);
    }

}

Você pode ver que as duas funções inferiores escrevem qualquer mensagem ou erro no referido TestContext.Isso também funcionará bem com testes paralelizáveis.

Posso então usar essa classe pai para configurar meus testes e escrever em meu console.

//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
    }
}

Agora você pode ver os resultados na saída (Visual Studio) e no TestResult.xml usando o NUnit Console Runner.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top