钻石 kata 以字母作为输入,并输出一个钻石形状。 给定一个字母,它会打印一个以 'A' 开头、最宽处为所给字母的钻石。
在下面的示例中,空格用·字符表示。
字母 'A' 的钻石:
A
字母 'C' 的钻石:
··A··
·B·B·
C···C
·B·B·
··A··
字母 'E' 的钻石:
····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····
这个练习中的测试和你平时见到的测试不太一样。通常,测试会检查给定一个输入时,输出是否与期望值一致。这称为_基于值的测试_。而这个练习使用的是_基于属性的测试_,测试会检查对于一系列输入,输出是否具有某种特定的属性。基于属性的测试与基于值的测试有两个关键区别:
在这个练习中,所有测试验证的都是菱形形状的某个属性,而菱形正是你的代码应该生成的。此外,所有测试都会检查它们所验证的属性是否对全部有效的输入字母('A' 到 'Z')都成立。
为了实现基于属性的测试,这个练习中的测试借助了 FsCheck 和 FsCheck.Xunit 包。想进一步了解 FsCheck,可以查看这个框架的文档。
如果你想了解更多关于基于属性的测试的信息,请参阅这篇文章。