前言
在刚学习编程的时候总是忘记处理一些特例(尤其是动态语言可以传各种值),为了养成良好的编程和测试习惯,在编写单元测试用例的时候, 我们注意考虑下如下测试用例(等价类划分):
- 正常值功能测试
- 边界值(比如最大最小,最左最右值)
- 异常值(比如 None,空值,非法值)
实战操作
def
binary_search
(
array
,
target
)
:
if
not
array
:
return
-
1
beg
,
end
=
0
,
len
(
array
)
while
beg
<
end
:
mid
=
beg
+
(
end
-
beg
)
//
2
# py3
if
array
[
mid
]
==
target
:
return
mid
elif
array
[
mid
]
>
target
:
end
=
mid
else
:
beg
=
mid
+
1
return
-
1
def
test
(
)
:
"""
如何设计测试用例:
- 正常值功能测试
- 边界值(比如最大最小,最左最右值)
- 异常值(比如 None,空值,非法值)
"""
# 正常值,包含有和无两种结果
assert
binary_search
(
[
0
,
1
,
2
,
3
,
4
,
5
]
,
1
)
==
1
assert
binary_search
(
[
0
,
1
,
2
,
3
,
4
,
5
]
,
6
)
==
-
1
assert
binary_search
(
[
0
,
1
,
2
,
3
,
4
,
5
]
,
-
1
)
==
-
1
# 边界值
assert
binary_search
(
[
0
,
1
,
2
,
3
,
4
,
5
]
,
0
)
==
0
assert
binary_search
(
[
0
,
1
,
2
,
3
,
4
,
5
]
,
5
)
==
5
assert
binary_search
(
[
0
]
,
0
)
==
0
# 异常值
assert
binary_search
(
[
]
,
1
)
==
-
1
当然我们也不用做的非常细致,要不然写测试是一件非常繁琐累人的事情,甚至有时候为了测试而测试,只是为了让单测覆盖率好看点。 当然如果是web应用用户输入,我们要假设所有的参数都是不可信的。 但是很多内部调用的函数我们基于约定来编程,如果你瞎传参数,那就是调用者的责任了。