Skip to content

Commit b217b8b

Browse files
committed
测试用例设计原则,正常值、边界值、异常值,等价类划分
1 parent 12c317d commit b217b8b

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

README.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)