Pergunta

Eu estou tentando usar TestDriven.Net não só para testar o meu código, mas para chamar uma função no meu código cuja finalidade é imprimir o estado interno do código para a janela de depuração.

Aqui está um exemplo muito simplificado do que estou tentando fazer ..

<TestFixture()> _
Public Class UnitTest

    <Test()> _
    Public Sub TestDebug()
        Dim oClass1 As New Class1

        Assert.AreEqual(True, oClass1.IsTrue)

        Debug.WriteLine("About to call .PrintDebug()")
        oClass1.PrintToDebug()

    End Sub

End Class

Public Class Class1

    Private _IsTrue As Boolean = True

    Public ReadOnly Property IsTrue() As Boolean
        Get
            Return _IsTrue
        End Get
    End Property

    Public Sub PrintToDebug()
        Debug.WriteLine("Internal state of Class1: " & _IsTrue)
    End Sub

End Class

Eu estou tentando testar a interface pública de Class1, e de alguma forma ver a saída da função Class1.PrintToDebug().

Eu olhei através do TestDriven.Net quickstart , que mostra exemplos de como usar o Debug.WriteLine em um teste de unidade, mas estranhamente isso não funciona para mim também - ou seja, a única saída na minha janela 'test' é:

------ Test started: Assembly: ClassLibrary1.dll ------


1 passed, 0 failed, 0 skipped, took 1.19 seconds.

Eu olhando tentou nas outras janelas (Debug e construir), a janela de depuração tem o 'Programa de saída' e as opções de 'excepção Mensagens' habilitado.

Eu olhei para as opções ou preferências e não pode encontrar qualquer!

Obrigado por sua ajuda!


Editar: Eu estou usando VB.Net 2.0, TestDriven.Net 2190/02/14 e NUnit 2.4.8.0

Foi útil?

Solução

I descobriram que, enquanto Debug.Writeline () não funciona com testes de unidade, Console.WriteLine () faz.

A razão é que quando você executar testes, o processo depurador não é invocado, e Debug.WriteLine () é ignorado. No entanto, se você usar "Teste com Debugger", eu acho que (não tentei) Debug.WriteLine () irá funcionar.

Outras dicas

Trace.WriteLine() parece ser a resposta: o)

Aqui está a saída para o exemplo da minha pergunta, usando Trace vez de Debug:

------ Test started: Assembly: ClassLibrary1.dll ------

Internal state of Class1: True

1 passed, 0 failed, 0 skipped, took 0.61 seconds.

Uma coisa que eu encontrei embora .. a execução é interrompida na primeira falha afirmação de teste de unidade, o que significa que as declarações Trace não são executados se um Assert() acima deles falhar.

Tente usar Trace.WriteLine (...) em vez. A chamada para Debug.WriteLine (...) só será feita quando DEBUG está definida. Por novos projetos do Visual Studio padrão não definir DEBUG, mas eles definem TRACE.

Eu deveria realmente mudar o exemplo de início rápido de usar rastreamento vez.

Saudações, Jamie.

Você pode querer saber que 2.16 (a versão atual beta) inclui:

1587: console de exibição Sempre mensagens de saída / erro e corredor de teste

Test Runner gerado mensagens e saída do console agora será exibido ao executar todos os testes em um projeto / solução.

1588: Opcionalmente exibição trace / debug saída quando executado em todos os testes projeto / solução

Por rastreamento padrão / saída de depuração não é exibida ao executar todos os testes em um projeto / solução. Esta lata comportamento ser modificada através da TesDriven.Net opções de painel.

Assim, parece que ele vai trabalhar na próxima versão.

IIRC, esta saída só é mostrado na janela de saída ao executar um teste individual. Tente botão direito do mouse no método de ensaio para executar apenas que o teste ...?

"Executar testes ..." pega qualquer configuração que você tem atualmente para construir a sua solução / projeto.

Você tem que se certificar de que as configurações de compilação atuais para a sua solução / projeto são definidas como "Debug" e não com "Release" (caso contrário Debug.Write * () chamadas são condicionalmente removido pelo compilador).

CTRL + ALT + I mostra a janela imediata

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