EUnit 单元测试框架
1. EUnit是什么
EUnit是一种用于进行单元测试的框架。
从根本上说,就是一种可以自动运行模块中名字以_``test()结尾的函数的方法,EUnit会把这些函数看作单元测试。
使用
-module(le1).
-author("01").
-export([add/2]).
%% ----------------------------------------------------
%% Description: 加法
%% ----------------------------------------------------
add(X, Y) ->
X + Y.
-module(le1_test).
-author("01").
-export([]).
-include_lib("eunit/include/eunit.hrl"). %%使用Eunit需包含eunit的头文件
%% ----------------------------------------------------
%% Description: 测试
%% ----------------------------------------------------
add_test() ->
4 = le1:add(2, 2).
如果把测试改为
add_test() ->
7 = le1:add(2, 2).
给出了一些错误信息
使用EUnit宏
EUnit提供了一些非常有用的宏。它们提供了更整洁的报告(包括行号)和更清晰的语义。有了这些宏,我们不仅能知道错误发生了,还能知道出错的原因:
- ?assert(Expression)和?assertNot(Expression):用来测试布尔值,assert的值不是true,就会显示一条错误,assertNot则相反
- ?assertEqual(A, B):表达式A和B进行严格的比较(=:=),如果它们不同,会发生错误还有一个与?assertEqual相反的宏
?assertNotEqual
- ?assertMatch(Pattern, Expression):用来进行像Pattern= Expression这种形式的匹配,它不会进行变量绑定
- ?assertError(Pattern, Expression): 这个宏告诉EUnit,Expression应该导致一个错误
- ?assertThrow(Pattern, Expression):和?assertError一样,不过针对的是throw(Pattern),此外还有
?assertExit(Pattern, Expression)
使用:
仍在le1_tests.erl文件中添加
%% ----------------------------------------------------
%% Description: 使用宏后的测试
%% ----------------------------------------------------
new_add_test() ->
?assertEqual(4, le1:add(2,2)),
?assertEqual(3, le1:add(1,2)),
?assert(is_number(le1:add(1,2))),
?assertEqual(3, le1:add(1,1)),
?assertError(badarith, 1/0).
测试