2017-11-30 1 views
1

현재 버스트 된/luassert를 사용하는 테스트 스위트를 작성하고 있으며, 별도의 함수에 어설 션을 넣었으므로 스택 추적이 부정확합니다. 내가 그것을 실행하면 내 테스트 케이스가 실패하지만 스택 트레이스 포인트 2 그래서 난했다 두 주장 중 어느 것이 말할 수 없다 줄을luassert 라이브러리에있는 assertion은 내장 된`error` 함수와 비슷한`level` 매개 변수를 갖고 있습니까?

local function my_custom_assertion(x)  -- 1 
    assert.is_true(x > 0)     -- 2 <- 
end          -- 3 
              -- 4 
describe("My test suite", function()  -- 5 
    it("they are positive", function() -- 6 
     my_custom_assertion(-10)   -- 7 <- 
     my_custom_assertion(-20)   -- 8 <- 
    end)         -- 9 
end)          -- 10 

예를 들어, 다음 테스트 스위트 (a_spec.lua)을 고려 실패한 사람.

$busted spec/a_spec.lua 
◼ 
0 successes/1 failure/0 errors/0 pending : 0.002242 seconds 

Failure → spec/a_spec.lua @ 6 
My test suite they are positive 
spec/a_spec.lua:2: Expected objects to be the same. 
Passed in: 
(boolean) false 
Expected: 
(boolean) true 

줄 7 또는 8을 대신 표시 할 수있는 방법이 있습니까? 가능한 한 가지 방법은 luassert의 assert.is_true 함수가 내장 된 error 함수와 비슷한 수준 매개 변수를 가진 경우입니다.

luassert의 소스 코드를 보면 does care about the stack level 인 것 같습니다. 그러나이 기능이 내부적인지 또는 사용자에게 어떻게 든 노출되어 있는지를 파악할 수 없었습니다.

답변

0

내 테스트를 작성하는 방법을 변경하지 않고도 어설 션 중 어느 것이 어설 션인지를 확인하는 실제 문제를 해결할 수있는 방법이 있음을 알 수 있습니다. -v (--verbose) 옵션을 사용하여 busted을 호출하면 단일 행 번호를 제공하는 대신 어설 션이 실패 할 경우 전체 스택 추적을 인쇄합니다.

$ busted -v spec/a_spec.lua 

0 successes/1 failure/0 errors/0 pending : 0.003241 seconds 

Failure → spec/a_spec.lua @ 6 
My test suite they are positive 
spec/a_spec.lua:2: Expected objects to be the same. 
Passed in: 
(boolean) false 
Expected: 
(boolean) true 

stack traceback: 
    spec/a_spec.lua:2: in upvalue 'my_custom_assertion' 
    spec/a_spec.lua:7: in function <spec/a_spec.lua:6> 

줄 번호 7에 대한 언급은 내가 실패한 주장이 무엇인지 알 수있게합니다.

1

대신 assert.xyzz()를 호출하는 함수를 작성하여 사용자 정의 주장을 만드는, true 또는 false을 반환하는 함수를 만들고 assert:register에 등록합니다.

README의 두 번째 예를 참조하십시오.

+0

실제로 사용하는 커스텀 어썰트 함수는'assert.are.same'을 호출합니다. 이것은 오류가있을 경우 일치하지 않는 테이블을 매우 유용하게 보여줍니다. 내 자신의 커스텀 어썰트 함수를 정의한다면 여전히 그것을 얻을 수있는 방법이 있을까요? – hugomg

+0

util.deepcompare require ('luassert.util')에서 대부분의 어려운 작업을 수행합니다. https://github.com/Olivine-Labs/luassert/blob/9fecb18f5d31e70d28c252e24fae373687f860d7/src/assertions.lua#L123을 참조하십시오. – basicer

관련 문제