Contest。又一个测试框架





5.00/5 (1投票)
介绍contest。新的.NET测试框架。
引言
在这篇短文中,我将简要介绍contest,一个.NET的新测试框架。我将重点介绍它的主要特点、相较于现有框架的优势,并提供一些链接供想动手尝试的人参考。
这绝不是一个完整的指南或使用contest的教程。如果您需要,请访问GitHub上的contest主页或contest入门指南,其中有关于如何创建、构建和运行此框架测试的教程。
背景
我假设读者至少具备使用一个主流单元测试框架(如NUnit、MSTest等)的实际经验。
什么是contest?
Contest是一个为.NET设计的极简主义、基于约定的测试框架。它是开源的(MIT许可),可以在Linux、Mac和Windows上运行。它附带一个快速的控制台测试运行器,并支持从流畅断言到BDD以及介于两者之间的各种测试风格。它的语法简洁明了,(在某些情况下)允许您编写可以被最终用户阅读的测试用例。下面是一个例子
// Fluent Assertions _ when_order_ammount_exceeds_1000_shipping_cost_should_be_free = assert => That(ThousandDollarsOrder.ShippingCost).Is(0); // BDD style _ when_order_ammount_exceeds_1000_shipping_cost_should_be_free = expect => ThousandDollarsOrder.ShippingCost.ToBe(0) // * note: I'm using one liners for the sake of brevity.
相较于其他测试框架的优势
- 基于约定,无需冗余的注解。
- 开箱即用地支持多种测试风格(Fluent、BDD等)。
- 灵活的控制台测试运行器。
- 程序集级别的设置/拆卸。
- 轻量级
谁在使用contest
大多数contest用户是.NET开发者,他们在Linux和Mac上工作,使用文本编辑器(如Vi或Sublime)编写代码,并以mono为主要运行时。当然,大多数应用程序部署到生产环境时运行在Windows上,但目前,控制台测试运行器在Windows系统上的速度非常慢(比Ubuntu或OSX慢约10倍)。我正在努力改进这一点,让我们看看效果如何……
为什么我们需要另一个测试框架?
如果您在Windows上运行,使用Visual Studio、ReSharper等工具,您可能不需要另一个测试框架。我使用NUnit已经十多年了,它是一款非常出色的软件。但是,如果您在Linux上进行.NET开发,使用Vi(或其他任何二等编辑器;))您可能会发现contest比NUnit更灵活。在我看来,NUnit的设计是为了从GUI运行器使用的。(我知道NUnitConsole,但我认为它对于构建服务器来说是完全可以的工具,但对于“红、绿、重构”周期来说就不那么好了)。
我非常喜欢contest的另一个方面是它的简洁语法,在使用文本编辑器时,简洁的语法至关重要。
控制台测试运行器亮点
- 通配符过滤
- 重新运行失败的测试
- 查找慢速测试
- 易于附加到Visual Studio的调试器。
- 列出失败的测试
限制
- 缺乏Visual Studio集成(因此,没有开箱即用的调试器)。
- 缺乏GUI运行器。
- 用户群小。
- 虽然您可以调试您的测试,但这是一种手工的过程(只能手动附加)。
如何获取Contest?
您可以从nuget或github获取contest。
但是,如果您想要最新的、最棒的版本,您应该始终直接前往github。
想了解更多关于contest的信息?
目前,所有动态都发生在github上。那里是您应该去的地方。
Contest是终极测试框架吗?
不,它不是。它只是为在UNIX系统上进行.NET开发的用户提供的一个替代方案。虽然它可以在Windows上使用,但我认为缺乏Visual Studio集成或GUI运行器对大多数.NET开发者来说是不可接受的。(这完全没问题,不久之前,这对我也将是一个无法接受的缺点)。
许可证
Contest根据MIT许可发布。简而言之,就是给予我署名,但不承担责任。
想立即开始开发?
太棒了!请前往GitHub上的Contest入门页面。在那里,您将找到一个入门项目,让您可以在无需安装或配置任何内容的情况下尝试contest。只需fork仓库并按照说明进行操作。
免责声明
请注意,这是Alpha软件。如果您喜欢走在技术前沿,那么您会很满意。但如果您正在寻找一个极其稳定、可靠的版本,您可能需要等待几个月(如果那一天真的会来的话)。
感谢您的阅读,如果您有任何问题,请告诉我。