Unit testing 单元测试显示输出

Unit testing 单元测试显示输出,unit-testing,Unit Testing,我搜索了单元测试工具,发现合适的工具是NUnit,我认为它很好,但我的问题是这个工具只显示测试方法的结果(通过或失败)我不仅需要显示通过或失败的输出。我如何使用NUnit显示输出,或者如果有其他单元测试工具,它也很好?如果不支持,请建议我如何解决它 欢迎所有想法在NUnit的底部栏上,您可以单击文本输出,并显示所有调试和控制台输出。管道化系统输出。控制台适用于NUnit,但它不是您的最佳选择 为了通过测试,您不需要查看控制台输出来验证测试是否通过。如果你是,那你就是做错了。测试应该是自动化和可重

我搜索了单元测试工具,发现合适的工具是NUnit,我认为它很好,但我的问题是这个工具只显示测试方法的结果(通过或失败)我不仅需要显示通过或失败的输出。我如何使用NUnit显示输出,或者如果有其他单元测试工具,它也很好?如果不支持,请建议我如何解决它


欢迎所有想法

在NUnit的底部栏上,您可以单击文本输出,并显示所有调试和控制台输出。

管道化系统输出。控制台适用于NUnit,但它不是您的最佳选择

为了通过测试,您不需要查看控制台输出来验证测试是否通过。如果你是,那你就是做错了。测试应该是自动化和可重复的,无需人工干预。手动验证无法扩展并产生误报

另一方面,为失败的测试提供控制台输出是有帮助的,但它只会提供可以通过附加调试器推断出来的信息。在应用程序中添加控制台日志记录需要付出很多额外的努力,但几乎没有什么好处

相反,请确保错误消息是有意义的。编写测试时,确保断言是明确的。始终尝试使用与您正在断言的对象非常匹配的断言,并提供一条失败消息,解释为什么测试很重要

例如:

// very bad
Assert.IsTrue( collection.Count == 23 );
当测试失败时,上面的断言实际上没有提供太多帮助。当NUnit格式化断言的输出时,此断言将不会帮助您,因为它将声明类似于“期望但曾经”的内容

更合适的断言将提供更有意义的测试失败

// much better
Assert.AreEqual(23, collection.Count, 
               "There should be a minimum of 23 items by default.");

这提供了一条更有意义的失败消息:“预期但实际上是:默认情况下至少应有23项。”

这取决于您希望从测试中输出数据的位置。 我相信您在
文件、日志、控制台、调试
输出中提到了其他内容。 另一种选择是
NUnit
允许在常规测试输出流中输出任何消息,只需使用以下实用方法:

为了成功的测试

Assert.Pass( string message, object[] parms );
对于失败的测试

Assert.Fail( string message, object[] parms );

更多详细信息请参见

这篇帖子在被问到这个问题后是looooong,但想插话。是的,您可以在单元/集成测试中完成很多工作,并且可能完成您需要的大部分工作。所以,我同意,在你的测试方法上尽你所能

但有时,提供一些输出是有用的。特别是当您需要进一步验证结果,并且无法通过单元测试完成验证时。设想一个您的开发/测试环境没有或限制访问的外部系统

例如,假设您正在点击一个webapi来创建索赔,而响应是新的索赔编号。但是api不公开获取声明的方法,您需要验证在进行webapi调用时创建的一些其他数据。在这种情况下,您可以使用输出的索赔编号手动检查远程系统


FWIW

ok当我调用方法getEmp(10)时,它将返回带有firstname和LastName以及job和age的Emplyee对象。。。。它的所有成员。这就是我需要的。您可以使用System.Diagnostics.Debug.Write或System.Console.WriteLine将您认为必要的任何信息写入NUnit文本输出。我是否可以获取返回对象的属性,因为我不知道该对象。我需要打印对象内的所有属性(员工、公司或…)如果属性是私有的,您可以使用反射来获取字段或属性,并打印它们,只要您拥有对象本身。看到您的响应后,我想知道我是否误解了,他是想要在代码中生成的输出还是测试的输出?它只是说输出,所以我可能假设了一般的输出,我还以为它是一般的输出。我的观点是,如果你不得不依赖常规输出,因为通过/失败是不够的,你应该重新考虑你的测试方法。不,我需要的是我的输出,而不是常规输出。你是对的,耶稣,我试着真正测试它布莱恩?有时我需要的信息比“我的考试不及格,去钓鱼”更多。你写集成测试吗?您想知道它们失败的原因,而不仅仅是引发的异常的细节吗?Warren我的回答是针对单元测试(类/方法)级别的测试,有明确的预期和详细的断言——您不需要检查输出来手动验证测试。在我回答问题后的5年里,大多数现代测试运行者在测试输出中都包含了记录器的输出,所以这在这一点上确实是一个没有实际意义的问题。不管怎样,测试输出将如何在正确断言所不能的方式上帮助您?这些方法将结束测试。