@@ -203,6 +203,64 @@ pip install when-changed
203203每次我们改动了代码,就会自动执行代码里的单元测试了。pytest 会自动发现以 test
204204开头的函数并执行测试代码。良好的工程需要我们用单测来保证,将来即使修改了内部实现逻辑也方便做回归验证。
205205
206+ 或者你可以在的 ~ /.bashrc or ~ /.zshrc 里边加上这个映射(别忘记加上之后source下):
207+
208+ ``` sh
209+ # 监控当前文件夹文件变动自动执行命令
210+ alias watchtest=' when-changed -v -r -1 -s ./ '
211+ ```
212+
213+ 然后在你的代码目录里头执行 ` watchtest pytest -s somefile.py ` 一样的效果
214+
215+
216+ ## 测试用例设计
217+
218+ 笔者在刚学习编程的时候总是忘记处理一些特例(尤其是动态语言可以传各种值),为了养成良好的编程和测试习惯,在编写单元测试用例的时候,
219+ 我们注意考虑下如下测试用例(等价类划分):
220+
221+ - 正常值功能测试
222+ - 边界值(比如最大最小,最左最右值)
223+ - 异常值(比如 None,空值,非法值)
224+
225+ ```
226+ def binary_search(array, target):
227+ if not array:
228+ return -1
229+ beg, end = 0, len(array)
230+ while beg < end:
231+ mid = beg + (end - beg) // 2 # py3
232+ if array[mid] == target:
233+ return mid
234+ elif array[mid] > target:
235+ end = mid
236+ else:
237+ beg = mid + 1
238+ return -1
239+
240+
241+ def test():
242+ """
243+ 如何设计测试用例:
244+ - 正常值功能测试
245+ - 边界值(比如最大最小,最左最右值)
246+ - 异常值(比如 None,空值,非法值)
247+ """
248+ # 正常值,包含有和无两种结果
249+ assert binary_search([0, 1, 2, 3, 4, 5], 1) == 1
250+ assert binary_search([0, 1, 2, 3, 4, 5], 6) == -1
251+ assert binary_search([0, 1, 2, 3, 4, 5], -1) == -1
252+ # 边界值
253+ assert binary_search([0, 1, 2, 3, 4, 5], 0) == 0
254+ assert binary_search([0, 1, 2, 3, 4, 5], 5) == 5
255+ assert binary_search([0], 0) == 0
256+
257+ # 异常值
258+ assert binary_search([], 1) == -1
259+ ```
260+
261+ 当然我们也不用做的非常细致,要不然写测试是一件非常繁琐累人的事情,甚至有时候为了测试而测试,只是为了让单测覆盖率好看点。
262+ 当然如果是web应用用户输入,我们要假设所有的参数都是不可信的。 但是很多内部调用的函数我们基于约定来编程,如果你瞎传参数,那就是调用者的责任了。
263+
206264
207265## 勘误
208266
0 commit comments