上一篇介绍了下 lua 的第一个类型
Lua 与游戏测试(二)
本文周日写的,但周日太冷了,就没上传,写这个文章时,我一直在思考,最好还是用先读懂 lua 的结构,当然我发现自己的水平也没办法由浅入深,lua 在我的测试里,目前阶段还是经常是用于调式的。

回归正题
布尔值有两种:true 和 false。在 Lua 中,只有 false 和 nil 才被计算为 false,
默认的都是 true
* 在 lua 里需要做 2 个或者 2 个以内判断的一般都用 false,比如是否条件:

local obj = 
{
m_isRequestPassStatus = false,    --是否服务器申请通关信息
m_isGetPassStatus = false,
      
}
其中一段解释类比 RequestPassStatus
function BattleManager:SetIsRequestPassStatus(isrequest)
    if "boolean" ~= type(isrequest) then
        CommonHelperFunc.MyAssert(false, "BattleManager:SetIsRequestPassStatus argu error")
        return
    end
    self.m_isRequestPassStatus = isrequest
end

可以理解了吗?结构上和其他语言差不多, 大于 2 个及以上的其他条件类的比如:进入副本条件限制等,就不能用这种方式,范例如下:
可以尝试去读以下代码范例片段:

-- 进入战斗时的条件限制,如下:
local instance
EnterFight_OK =0 可以战斗
EnterFight_PlayerLevelNotEnough = 1 -- 玩家等级不足
EnterFight_EnergyNotEnough = 2  -- 体力不足 
EnterFight_CostOutRange = 3     -- 组队Cost超出上限
EnterFight_HaveNoTime = 4   -- 关卡次数限制

function GetSingleton()
    if instance == nil then 
        return BattleManager:New() –如果instance等于nil,则创建对象BattleManager
    end
    return instance
end

function BattleManager:New()  --如果assert的前面instance ~= nil为非空,则使用instance
    if instance ~= nil then
        CommonHelperFunc.MyAssert( false )
        return instance
    end

--战斗进入条件
function BattleManager:EnterFightCheck()  --定义之前声明的BattleManager
    local gameMainPlayer = GameMainPlayer.GetSingleton()
    local stageManager = StageManager.GetSingleton()
    local stage = stageManager:GetStage(self.m_curStageID) --副本阶段

    if gameMainPlayer:GetLevel() < stage:GetDef().needlevel then
        return EnterFight_PlayerLevelNotEnough  --玩家等级 
    end
    if gameMainPlayer:GetEnergy() < stage:GetDef().need_energy * self:GetFightTime() then
        return EnterFight_EnergyNotEnough  --体力
    end

    if stage:GetPassTimes() >= stage:GetDef().time then
        return EnterFight_HaveNoTime –关卡次数
    end

    local teamManager = gameMainPlayer:GetTeamData()
    if teamManager:GetTeamCost(teamManager:GetCurSelectedTeamIndex()
) > gameMainPlayer:GetCost() then
        return EnterFight_CostOutRange --组队Cost超出上限
    end
     
return EnterFight_OK  --就是可以战斗
end 

以上一段段屏蔽就可以逐渐检查测试.一段满足条件的战斗的例子.lua 语言先需要去读懂他和了解结构才可以用于定位问题去辅助测试。


↙↙↙阅读原文可查看相关链接,并与作者交流