Ruby中单元测试(Unit Test)方法
- 格式:pdf
- 大小:99.96 KB
- 文档页数:3
Ruby中单元测试(Unit Test)方法
Ruby中也提供了单元测试的框架,类似Java中的JUnit,此框架在Ruby中被成为mini test。
我们先看一个例子,这个是我的源代码:
[code lang=”ruby”]
require ‘json’
module PMU_INTERFACE
class IUserLoginReq
def initialize(command_id=nil, user_name=nil, user_password=nil, auth_code=nil, token=nil)
@command_id = command_id
@user_name = user_name
@user_password = user_password
@auth_code = auth_code
@token = token
end
def to_json(*a)
{
"json_class" => self.class,
"data" => self.to_json_hash
}.to_json(*a)
end
def to_json_hash
{:command_id => @command_id, :user_name => @user_name, :user_password =>
@user_password, :auth_code => @auth_code, :token => @token}
end
def self.json_create(json_str)
data = json_str["data"]
new(data["command_id"], data["user_name"], data["user_password"], data["auth_code"], data["token"])
end
attr_accessor :command_id, :user_name, :user_password, :auth_code
end
class IUserLoginResp
def initialize(result=nil, user_name=nil, user_password = nil)
#the login result
@result = result
#the token holding by client
@user_name = user_name
@user_password = user_password
end
def to_json(*a)
{
"json_class" => self.class,
"data" => {:result => @result, :user_name => @user_name, :user_password =>
@user_password}
}.to_json(*a)
end
def self.json_create(json_str)
data = json_str["data"]
new(data["result"], data["user_name"], data["user_password"])
end
attr_accessor :result, :user_password, :user_name
end
end
[/code]
给上面的源代码写测试代码:
[code lang=”ruby”]
require ‘test/unit’
require ‘json’
require_relative ‘../../../source/server/service/pmu_interface/app_interface’
class TestInterface < Test::Unit::TestCase
def test_user_login_req
req = PMU_INTERFACE::IUserLoginReq.new(1, ‘a@b ’, ‘aa’, ‘1234’ , ”)
str = req.to_json
req2 = JSON.parse(str)
assert(str != nil && req2 mand_id == req mand_id)
end
def test_user_login_resp
req = PMU_INTERFACE::IUserLoginResp.new(1, ‘1234’, ‘1234’)
str = req.to_json
req2 = JSON.parse(str)
assert(str != nil && req2.result == req.result)
end
end
[/code]
我们可以看到,测试类继承了Test::Unit::TestCase类,这个类在test/unit库中,test/unit库是Ruby 的系统库,成为mini test。
每个测试方法都是以test开头,这点也与JUnit的规则一致,然后assert也是一致,所以如果你熟悉JUnit,那么做Ruby代码的单元测试就不用学习可以直接写。
还有一点,我们都知道JUnit提供了TestSuite这个类,可以将很多TestCase汇总到一块执行,这个对于持续集成非常有用,因为持续集成需要执行所有的TestCase并输入报告。
要在Ruby中执行TestSuite不是那么简单,因为Ruby内置的库里面没有包含TestSuite,需要额外安装一个第三方的gem(test-unit):
[code lang=”ruby”]
sudo gem install test-unit
[/code]