我正在尝试使用TestDriven.Net来测试我的代码,而不是在我的代码上调用一个函数,其目的是将代码的内部状态打印到Debug窗口。
这是我正在尝试做的一个非常简单的例子..
<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
我正在尝试测试Class1的Public接口,并以某种方式查看Class1.PrintToDebug()
函数的输出。
我查看了TestDriven.Net quickstart,其中显示了在单元测试中使用Debug.WriteLine
的示例,但奇怪的是这对我来说也不起作用 - 即我的'测试中唯一的输出'窗口是:
------ Test started: Assembly: ClassLibrary1.dll ------
1 passed, 0 failed, 0 skipped, took 1.19 seconds.
我试过查看其他窗口(Debug和Build),Debug窗口启用了'Program Output'和'Exception Messages'选项。
我找了选项或偏好,找不到任何!
感谢您的帮助!
<小时/> 编辑:我正在使用VB.Net 2.0,TestDriven.Net 2.14.2190和NUnit 2.4.8.0
答案 0 :(得分:11)
我发现虽然Debug.Writeline()不能用于单元测试,但是Console.WriteLine()可以。
原因是当您运行测试时,不会调用调试器进程,并且会忽略Debug.WriteLine()。但是,如果您使用“Test with Debugger”,我认为(尚未尝试过)Debug.WriteLine()将起作用。
答案 1 :(得分:3)
Trace.WriteLine()
似乎就是答案:o)
以下是我的问题示例的输出,使用Trace
代替Debug
:
------ Test started: Assembly: ClassLibrary1.dll ------
Internal state of Class1: True
1 passed, 0 failed, 0 skipped, took 0.61 seconds.
我发现了一件事情......在第一次失败的单元测试断言时暂停执行,这意味着如果Trace
语句失败,则Assert()
语句不会被执行。
答案 2 :(得分:2)
尝试使用Trace.WriteLine(...)。只有在定义了DEBUG时才会调用Debug.WriteLine(...)。默认情况下,新的Visual Studio项目不再定义DEBUG,但它们确实定义了TRACE。
我应该更改quickstart示例以改为使用Trace。
此致 杰米。
答案 3 :(得分:1)
您可能想知道2.16(当前测试版)包括:
1587:始终显示控制台 输出/错误和测试运行器消息
测试跑步者生成的消息和 现在将显示控制台输出 当运行所有测试时 项目/溶液
1588:可选择显示跟踪/调试 运行所有测试时输出 项目/溶液
默认情况下,trace / debug输出不是 执行所有测试时显示 项目/解决方案。这种行为可以 通过TesDriven.Net进行修改 选项窗格。
所以它似乎可以在下一版本中使用。
答案 4 :(得分:0)
IIRC,此输出仅在运行单个测试时显示在输出窗口中。尝试右键单击测试方法以仅运行该测试...?
答案 5 :(得分:0)
“运行测试...”选择您目前构建解决方案/项目所需的任何设置。
您必须确保解决方案/项目的当前构建设置设置为“Debug”而不是“Release”(否则编译器会删除Debug.Write *()调用conditionally)
答案 6 :(得分:0)
CTRL + ALT +我向您显示即时窗口