@@ -203,6 +203,64 @@ pip install when-changed
203
203
每次我们改动了代码,就会自动执行代码里的单元测试了。pytest 会自动发现以 test
204
204
开头的函数并执行测试代码。良好的工程需要我们用单测来保证,将来即使修改了内部实现逻辑也方便做回归验证。
205
205
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
+
206
264
207
265
## 勘误
208
266
0 commit comments