모듈:UnitTests/설명문서

위키백과, 우리 모두의 백과사전.

UnitTests 모듈은 다른 스크립트에서 사용할 수 있는 유닛 테스트 도구를 require를 통해 제공하고 있습니다. 자세한 설명은 위키백과:루아#유닛 테스트를 참고하세요.

아래는 예제 코드로써 UnitTests를 사용하는 모습을 볼 수 있는 모듈:Bananas/시험장의 코드입니다.

-- [[모듈:Bananas]]의 테스트 케이스입니다. 테스트를 하려면 '토론'을 클릭하세요.
local p = require('Module:UnitTests')
 
function p:test_hello()
    self:preprocess_equals('{{#invoke:Bananas | hello}}', 'Hello, world!')
end
 
return p

토론 문서인 모듈토론:Bananas/시험장에선 모듈:Bananas의 유닛 테스트를 실행한 결과가 출력되며, 유닛 테스트 결과를 출력하기 위해 {{#invoke: Bananas/testcases | run_tests}}를 사용하고 있는 것을 볼 수 있습니다.

참고로 테스트를 수행하는 테스트 메소드의 이름은 위 코드의 test_hello처럼 반드시 test로 시작되어야 합니다.

메소드[편집]

run_tests를 제외한 모든 메소드에서 매개변수 options를 선택적으로 사용할 수 있는 것을 볼 수 있는데, 이 매개변수의 값으로 { nowiki=1 }을 주면 테스트 결과가 출력될 때 실젯값과 기댓값이 위키텍스트로 처리되어 해석되지 않고 <nowiki>...</nowiki>를 사용한 것처럼 위키텍스트 그대로 출력됩니다.

run_tests[편집]

  • run_tests()
  • run_tests(differs_at)

모든 테스트를 실행시킵니다. 매개변수 differs_at1이 주어진 경우, 기댓값과 실젯값이 다르기 시작한 첫번째 위치를 나타내는 열이 추가됩니다. 일반적으로 유닛 테스트 코드가 있는 모듈의 토론 문서(모듈토론)에서 사용됩니다.

    {{ #invoke: Bananas/시험장 | run_tests }}
    {{ #invoke: Bananas/시험장 | run_tests | differs_at=1 }}

preprocess_equals[편집]

  • preprocess_equals(text, expected)
  • preprocess_equals(text, expected, options)

전처리 과정을 거쳐 실젯값을 출력해줄 위키텍스트와 평문으로 작성된 기댓값을 각각 매개변수 textexpected로 받은 뒤, 전처리를 실행한 값과 기댓값이 같은지 비교하여 테스트의 성공 여부를 판별합니다. 스크립트와 틀은 문서에서 불러오는 방식과 동일한 방식으로 불러옵니다.

    self:preprocess_equals('{{#invoke: Bananas | hello}}', 'Hello, world!', { nowiki=1 })

preprocess_equals_many[편집]

  • preprocess_equals_many(prefix, suffix, cases)
  • preprocess_equals_many(prefix, suffix, cases, options)

테스트 케이스 묶음으로써 매개변수 cases로 받은 (실젯값을 출력해줄 위키텍스트, 평문 기댓값) 짝들을 메소드 preprocess_equals에 대입하며 반복 실행시킵니다. 이 때 매개변수 prefixsuffix가 위키텍스트 앞뒤에 각각 접두/접미 문자열로써 자동으로 추가됩니다.

    self:preprocess_equals_many('{{#invoke: BananasArgs | add |', '}}', {
        {'2|3', '5'},
        {'-2|2', '0'},
    }, { nowiki=1 })

preprocess_equals_preprocess[편집]

  • preprocess_equals_preprocess(text, expected)
  • preprocess_equals_preprocess(text, expected, options)

전처리 과정을 거쳐 실젯값을 출력해줄 위키텍스트 및 같은 방식으로 기댓값을 출력해줄 위키텍스트를 각각 매개변수 textexpected로 받은 뒤, 두 위키텍스트의 처리 결과가 같은지 비교하여 테스트의 성공 여부를 판별합니다. 스크립트의 출력값과 위키백과에 먼저 있었던 틀의 출력값이 서로 일치하는지 확인하고자 할 때 유용합니다.

    self:preprocess_equals_preprocess('{{#invoke: Bananas | hello}}', '{{Hello}}', { nowiki=1 })

preprocess_equals_preprocess_many[편집]

  • preprocess_equals_preprocess_many(prefix1, suffix1, prefix2, suffix2, cases)
  • preprocess_equals_preprocess_many(prefix1, suffix1, prefix2, suffix2, cases, options)

테스트 케이스 묶음으로써 매개변수 cases로 받은 (실젯값을 출력해줄 위키텍스트, 기댓값을 출력해줄 위키텍스트) 짝들을 메소드 preprocess_equals_preprocess에 대입하며 반복 실행시킵니다. 이 때 매개변수 prefix1suffix1은 첫번째 부분(실젯값을 출력해줄 위키텍스트)의 앞뒤에, 매개변수 prefix2suffix2은 두번째 부분(기댓값을 출력해줄 위키텍스트)의 앞뒤에 각각 접두/접미 문자열로써 자동으로 추가됩니다. 테스트 케이스에서 두번째 부분(기댓값을 출력해줄 위키텍스트)이 따로 기재되지 않은 경우엔 기대값을 출력해줄 위키텍스트로써 첫번째 부분(실젯값을 출력해줄 위키텍스트)을 그대로 사용합니다.

    self:preprocess_equals_preprocess_many('{{#invoke:Foo | spellnum |', '}}', '{{spellnum', '}}', {
        {'2'}, -- {'2','2'}, 와 같음
        {'-2', '-2.0'},
    }, { nowiki=1 })

equals[편집]

  • equals(name, actual, expected)
  • equals(name, actual, expected, options)

계산된 값과 기댓값을 각각 매개변수 actualexpected로 받아서 == 연산자를 이용해 둘이 일치하는지 확인합니다. 다른 모듈에 쓰이도록 설계된 모듈을 테스트할 때 #invoke를 사용하는 것보다 유용합니다.

    self:equals('Simple addition', 2 + 2, 4, { nowiki=1 })

equals_deep[편집]

  • equals_deep(name, actual, expected)
  • equals_deep(name, actual, expected, options)

equals와 비슷하지만 매개변수 actualexpected로 주어진 루아 테이블을 심층적인 비교를 하는 방식을 이용함으로써 서로 같은지 비교합니다. 이 때 어떤 값도 순환 참조를 포함해선 안되는데, 이는 현재의 구현상태에선 다루고 있지 않아 무한 루프에 빠질 수 있기 때문입니다.

    self:equals_deep('Table comparison', createRange(1,3), {1,2,3}, { nowiki=1 })

같이 보기[편집]