c# list基于属性去重
介绍
到目前为止,我们在这里和此处的前两篇博客文章中已经讨论了基于属性的测试的好处。 我相信你们大多数人 这个概念仍然很抽象。 我们已经看到了这项技术,但是如何在C#中实现呢? 在本系列中,我们将使用TDD和基于属性的测试来完成解决Diamond Kata的所有步骤。
钻石卡塔
给定输入字母,打印以A开头且最宽的字母为字母的菱形。
例如,对于输入:D
---A---
--B-B--
-C---C-
D-----D
-C---C-
--B-B--
---A---
为什么选择这个特定的Kata? 好吧,如果您尝试使用基于示例的测试来解决它,则实际上需要进行26个测试以确保其正常工作。 它看起来似乎不是很多测试,但是如果您尝试一下,您很快就会发现前几个测试是微不足道的,并且随着您接近Z,测试变得越来越难以阅读和编写。 通常,它是一种代码气味,表明某些基于属性的测试将是更好的方法。
TDD
在本系列中,我们还将使用TDD,并且您会发现,与基于示例的测试相比,基于属性的测试要容易得多。 因此,对于我们这样的优秀TDD从业人员,我们将从可以想到的最简单的算法实现开始。
public class Diamond
{
private static IEnumerable< string > Generate ( char c )
{
yield return "A" ;
}
}
容易吧? 它仅适用于A情况,但这是一个很好的起点。
我已经听到你们中间的纯粹主义者了。
这不是做TDD的正确方法! 红色->绿色->重构! 您应该从失败的测试开始,而不是从实现开始。
您没看错,但是让我们在这里变得现实。 这只是一个起点,我保证今后我们会做更好的TDD:D。
工具
基于属性的测试是一个非常简单的概念,但是生成适当的伪随机输入可能比看起来困难。 对我们来说幸运的是,其他人解决了这个问题并构建了出色的工具。 在我们的例子中,我们将使用FsCheck ,这是为F#设计的基于属性的测试框架。
我很困惑,我们是用C#还是F#来做?
那就是.NET的魅力,即使该库是为F#编写的,所有.NET语言都可以编译为中间语言(IL或MSIL) ,因此可以互操作。 这意味着我们可以从C#调用该库。
安装NuGet软件包,即可开始使用。
dotnet add package FsCheck --version2.14 . 2
dotnet add package FsCheck.Xunit --version 2.14 . 2
结束语
我认为我们具有开始的所有先决条件。 请继续关注我们将执行第一个测试的下一篇文章 。
先前发布在 https://blog.miguelbernard.com/how-to-get-started-with-property-based-testing-in-csharp/
翻译自: https://hackernoon.com/introduction-to-property-based-testing-in-c-c6w3uxz
c# list基于属性去重