让我们看看对于这个QuickSort,我们还能写出哪些测试用例呢:
[Fact] public void should_sort_empty_array() { var arr = new int[]{}; var expected = new int[]{}; var actual = QuickSort(arr); AssertArrayEqual(expected, actual); } [Fact] public void should_sort_array_with_only_one_element() { var arr = new int[]{1}; var expected = new int[]{1}; var actual = QuickSort(arr); AssertArrayEqual(expected, actual); } [Fact] public void should_sort_array_already_sorted() { var arr = new int[]{1,2,3,4,5}; var expected = new int[]{1,2,3,4,5}; var actual = QuickSort(arr); AssertArrayEqual(expected, actual); } private void AssertArrayEqual(int[] expected, int[] actual) { Assert.Equal(expected.Length, actual.Length); for(int i=0;i<actual.Length;i++) { Assert.Equal(expected[i],actual[i]); } } |
好了,到这里你就可以安心的修改代码,无需一遍一遍的输入测试数据,检查输出,也不需要担心你的修改会使程序出错。对于看代码的人来说,可以看到什么样的输入会获得什么样的输出,以及如何使用这个方法。当把代码下载下来研究的时候,也不需要自己输入测试数据了,如果想要换一个不同的测试数据,只要添加一个测试就行了。
那么如何先写测试后写代码呢?
前面说了,对于一段程序的测试其实就是一些输入与输出组成的测试用例,这些测试用例与你如何实现QuickSort方法毫无关系,因为QuickSort的功能就是排序,不管里面的代码如何实现,他都必须要完成排序的这个功能,因此只要根据排序的要求写就行了。一旦你熟悉了如何编写测试用例,如何考虑程序可能获得的各种输入,从后写测试到先写测试,只是一个改变习惯适应的过程,并不会很难。
倡议以后发表代码的同学,附上自动化测试(并注意代码风格、编码规范),于人于己都有好处。当然,决定权在你自己手里。
推荐阅读: