모듈:단위 테스트
ModuleUnitTests는 require를 사용하여 다른 스크립트에서 사용할 수 있는 단위 테스트 기능을 제공합니다.위키백과 참조:자세한 내용은 Lua#Unit_testing을 참조하십시오.다음은 모듈의 샘플입니다.예/테스트 사례:
모듈에 대한 장치 테스트:예]]].대화 페이지를 클릭하여 테스트를 실행합니다. 현지의 p = 요구하다('모듈:단위 테스트') 기능. p:test_hello() 자신:preprocess_message('안녕하세요 세상이여!', '안녕하세요 세상이여!') 끝. 돌아가다 p 대화 페이지 모듈 대화:예제/테스트 사례를 사용하여 실행{{#invoke: Example/testcases run_tests}}위의 test_hello와 같은 테스트 메서드는 "test"로 시작해야 합니다.
방법들
런_디버깅
run_tests모든 테스트를 실행합니다.일반적으로 단위 테스트의 토크 페이지에서 사용됩니다.
{{#선택사항:예제/테스트 사례 run_tests} - 한다면
differs_at를 지정하면 예상 결과와 실제 결과가 다른 첫 번째 문자 위치를 나타내는 열이 추가됩니다.
{{#선택사항:예제/테스트 사례 run_message_at=1}이(가) 다릅니다. {{#선택사항:예제/테스트 사례 run_discovery 하이라이트=1} - 한다면
live_sandbox를 지정하면 헤더에 "테스트", "라이브", "샌드박스", "예상됨" 열이 표시됩니다.이것은 사용할 때 필요합니다.preprocess_equals_sandbox_many방법.
preprocess_message
preprocess_equals(text, expected, options)사전 처리할 위키 텍스트와 예상 결과 값을 제공합니다.스크립트 및 템플릿은 페이지에서와 동일한 방법으로 호출할 수 있습니다.
자신:preprocess_message('{Num}:예: 안녕하세요}', 안녕, 세상아!, {노비키=1}) preprocess_message_many
preprocess_equals_many(prefix, suffix, cases, options)지정된 쌍 집합에 대해 일련의 preprocess_equals() 호출을 수행합니다.지정된 접두사와 접미사를 각 텍스트에 자동으로 추가합니다.
자신:preprocess_message_many('{Num}:예: hello_to ', '}}', { {'존', '안녕, 존!'}, {'제인, '안녕, 제인!'}, }, {노비키=1}) preprocess_process_process
preprocess_equals_preprocess(text, expected, options)사전 처리할 두 개의 위키 텍스트를 제공하고 동일한 값을 생성하는지 확인합니다.스크립트를 기존 템플릿과 비교하는 데 유용합니다.
자신:preprocess_process_process('{Num}:예: 안녕하세요}', '{{Hello}}', {노비키=1}) preprocess_message_process_many
preprocess_equals_preprocess_many(prefix1, suffix1, prefix2, suffix2, cases, options)지정된 쌍 집합에 대해 일련의 preprocess_equals_preprocess() 호출을 수행합니다.두 인수 모두에 대해 제공된 접두사/접미사가 자동으로 추가됩니다.어떤 경우에도 두 번째 부품을 지정하지 않으면 첫 번째 부품이 사용됩니다.
자신:preprocess_message_process_many('{Num}:숫자 숫자_를_english'로 변환, '}}', '{{num}', '}}', { {'2'}, {'2','2'}에 해당합니다. {'-2', '-2.0'}, }, {노비키=1}) preprocess_process_message_many
preprocess_equals_sandbox_many(module, function, cases, options)지정된 쌍 집합에 대해 일련의 preprocess_equals_compare() 호출을 수행합니다.테스트는 모듈의 라이브 버전과 /sandbox 버전을 비교하고 예상 결과를 비교합니다.live_sandbox가 지정되어 있는지 확인하거나 출력에 오류가 있을 수 있습니다.
자신:preprocess_process_message_many('{Num}:예', '안녕_to', { {'존', '안녕, 존!'}, {'제인, '안녕, 제인!'}, }, {노비키=1}) 동등한
equals(name, actual, expected, options)계산된 값과 예상 값을 제공하고 == 연산자에 따라 동일한지 확인합니다.#invoke를 사용하지 않고 다른 모듈에서 사용하도록 설계된 모듈을 테스트하는 데 유용합니다.
자신:동등한('단순 추가', 2 + 2, 4, {노비키=1}) equals_deep
equals_deep(name, actual, expected, options)동일하지만 심층 비교를 수행하여 테이블을 처리합니다.두 값 모두 순환 참조를 포함하지 않아야 합니다. 순환 참조는 현재 구현에서 처리되지 않으며 무한 루프가 발생할 수 있기 때문입니다.
자신:equals_deep('표 비교', createRange(1,3), {1,2,3}, {노비키=1}) 테스트 옵션
위에 나열된 테스트 기능의 옵션 매개 변수로 전달할 수 있는 유효한 옵션입니다.
노비키
이 옵션을 활성화하면 출력 텍스트가 다음 위치로 래핑됩니다.<nowiki>...</nowiki>텍스트가 렌더링되지 않도록 태그 지정(예: 페이지 대신 <span>[[예: 페이지]/span>)
합쳐진
이 옵션을 활성화하면 출력 텍스트가 렌더링 모드와 노위키 모드 모두에 표시되어 원시 텍스트와 시각적 비교를 모두 수행할 수 있습니다.
사원 양식
이 옵션을 활성화하면 스트립 마커의 ID가 수정됩니다. <templatestyles>...</templatestyles>잘못된 검정 실패를 방지하기 위해 처리할 때 생성됩니다.
스트립 마커
이 옵션을 활성화하면 처리 시 생성되는 모든 스트립 마커의 ID가 수정되어 테스트에 잘못 실패하지 않도록 할 수 있습니다.
과시하는
테스트의 출력 표시 방법을 변경하는 선택적 기능입니다.이는 비교 프로세스에 영향을 미치지 않습니다.
참고 항목
UnitTester는 다른 Lua 스크립트에 대한 장치 테스트를 제공합니다.자세한 내용은 Wikipedia:Lua#Unit_testing]]. 사용자 설명서는 대화 페이지를 참조하십시오. 현지의 유닛 테스터 = {} 현지의 틀, 똑딱이, 건너다, 해야 할 현지의 result_table_message = 클래스 =\"위키에 사용할 수 있는 단위-위키드-결과\"\n%s\n!! 문자!!예상됨!!실제" 현지의 result_table_live_table_discovery_disc = 클래스 =\"위키에 사용할 수 있는 단위-위키드-결과\"\n%s\n!! 시험!!라이브!!샌드박스!!예상됨" 현지의 결과_표 = { n = 0 } 현지의 result_table_mt = { 삽입하다 = 기능. (자신, ...) 현지의 n = 자신.n 위해서 i = 1, 선택한다.('#', ...) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 현지의 발 = 선택한다.(i, ...) 한다면 발 ~= 영의 그리고나서 n = n + 1 자신[n] = 발 끝. 끝. 자신.n = n 끝., insert_format = 기능. (자신, ...) 자신:삽입하다(string.형식(...)) 끝., 을 속이는 = 테이블.콘캣 } result_table_mt.__index = result_table_mt 상을 차리다(결과_표, result_table_mt) 현지의 num_html = 0 현지의 num_html = 0 현지의 기능. 첫째_차이(s1, s2) s1, s2 = 끈으로 묶는(s1), 끈으로 묶는(s2) 한다면 s1 == s2 그리고나서 돌아가다 '' 끝. 현지의 맥스. = 수학.min(#s1, #s2) 위해서 i = 1, 맥스. 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 s1:후보선수(i,i) ~= s2:후보선수(i,i) 그리고나서 돌아가다 i 끝. 끝. 돌아가다 맥스. + 1 끝. 현지의 기능. return_vargs(...) 돌아가다 ... 끝. 기능. 유닛 테스터:산출량을 계산하다(본문, 기대됩니다, 실제., 옵션들) 전체에 대한 일부 변수를 쉽게 설정할 수 있습니다. num_html = num_html + 1 현지의 옵션들 = 옵션들 또는 {} 잘못된 고장을 방지하기 위해 스트립 마커를 수리하라는 요청이 있을 경우 수리합니다. 현지의 비교_기대의 = 기대됩니다 현지의 비교한 = 실제. 한다면 옵션들.사원 양식 그리고나서 현지의 양식 = '(\127[^\127]*UNIQ%-%-템플릿 스타일%-)(%x+)(%-QINU[^]\127]*\127)' 현지의 _, expected_marker_id = 비교_기대의:경기(양식) 모듈 렌더링에 템플릿 스타일이 있는 경우 마커를 제거합니다. 잘못된 테스트 실패를 방지하기 위해 예상된 ID를 사용합니다. 한다면 expected_marker_id 그리고나서 비교한 = 비교한:gsub(양식, '%1' .. expected_marker_id .. '%3') 실제 ID를 예상 ID로 바꾸고 패턴의 두 번째 캡처는 무시합니다. 비교_기대의 = 비교_기대의:gsub(양식, '%1' .. expected_marker_id .. '%3') 다른 스트립 마커 설명 끝. 끝. 한다면 옵션들.스트립 마커 그리고나서 현지의 양식 = '(\127[^\127]*UNIQ%-%-%l+%-)(%x+)(%-%-?QINU[^\127]*\127)' 현지의 _, expected_marker_id = 비교_기대의:경기(양식) 한다면 expected_marker_id 그리고나서 비교한 = 비교한:gsub(양식, '%1' .. expected_marker_id .. '%3') 비교_기대의 = 비교_기대의:gsub(양식, '%1' .. expected_marker_id .. '%3') 끝. 끝. 비교 수행 현지의 성공. = 비교한 == 비교_기대의 한다면 것은 아니다. 성공. 그리고나서 num_html = num_html + 1 끝. 결과를 표시하기 위한 위키 텍스트 정렬 한다면 옵션들.합쳐진 그리고나서 예상 열과 실제 열에 사용할 수 있는 두 개의 행이 필요합니다. 위쪽은 구문 분석되고 아래쪽은 구문 분석되지 않습니다. 현지의 에 있어서 다른 = 자신.에 있어서 다른 그리고. ('\nrowspan=2' .. 첫째_차이(비교_기대의, 비교한)) 또는 '' 강조 표시할 수 있는 눈금/십자의 로컬 복사본 현지의 하이라이트 = (해야 할 그리고. 것은 아니다. 성공. 그리고. 'style="배경:#fc0;") 또는 '' 결과_표:삽입하다( 시작출력 ' ', 하이라이트, 'rowspan=2', 성공. 그리고. 똑딱이 또는 건너다, 눈금/십자(2행) '\nrowspan=2', mw.본문.노비키(본문), '\n', 검정에 사용된 텍스트(2행) 기대됩니다, '\n', 실제., 구문 분석된 출력(첫 번째 행) 에 있어서 다른, '\n-\n', 관련된 차이가 있는 경우(2열) mw.본문.노비키(기대됩니다), '\n', mw.본문.노비키(실제.), 구문 분석되지 않은 출력(두 번째 행) '\n-\n' 종료출력 ) 또 다른 원하는 옵션으로 정상적으로 표시(nowiki/parse) 현지의 에 있어서 다른 = 자신.에 있어서 다른 그리고. ('\n' .. 첫째_차이(비교_기대의, 비교한)) 또는 '' 현지의 서식 지정 = 옵션들.노비키 그리고. mw.본문.노비키 또는 return_vargs 현지의 하이라이트 = (해야 할 그리고. 것은 아니다. 성공. 그리고. 'style="배경:#fc0;") 또는 '' 결과_표:삽입하다( 시작출력 ' ', 하이라이트, 성공. 그리고. 똑딱이 또는 건너다, 눈금/십자 '\n', mw.본문.노비키(본문), '\n', 테스트에 사용된 텍스트 서식 지정(기대됩니다), '\n', 서식 지정(실제.), 포맷된 출력 에 있어서 다른, 관련된 차이가 있는 경우 '\n-\n' 종료출력 ) 끝. 끝. 기능. 유닛 테스터:preprocess_message(본문, 기대됩니다, 옵션들) 현지의 실제. = 틀:전처리(본문) 자신:산출량을 계산하다(본문, 기대됩니다, 실제., 옵션들) 끝. 기능. 유닛 테스터:preprocess_message_many(접두어, 접미사, 경우들, 옵션들) 위해서 _, 사례. 에 짝을 짓다(경우들) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 자신:preprocess_message(접두어 .. 사례.[1] .. 접미사, 사례.[2], 옵션들) 끝. 끝. 기능. 유닛 테스터:preprocess_process_process(텍스트 1, 텍스트 2, 옵션들) 현지의 실제. = 틀:전처리(텍스트 1) 현지의 기대됩니다 = 틀:전처리(텍스트 2) 자신:산출량을 계산하다(텍스트 1, 기대됩니다, 실제., 옵션들) 끝. 기능. 유닛 테스터:preprocess_messages_messages(생방송의, 샌드박스, 기대됩니다, 옵션들) 현지의 실시간 텍스트 = 틀:전처리(생방송의) 현지의 샌드박스_텍스트 = 틀:전처리(샌드박스) 현지의 하이라이트_라이브 = 거짓의 현지의 highlight_flight = 거짓의 num_html = num_html + 1 한다면 실시간 텍스트 == 기대됩니다 그리고. 샌드박스_텍스트 == 기대됩니다 그리고나서 결과_표:삽입하다(' ', 똑딱이) 또 다른 결과_표:삽입하다(' ', 건너다) num_html = num_html + 1 한다면 실시간 텍스트 ~= 기대됩니다 그리고나서 하이라이트_라이브 = 진실의 끝. 한다면 샌드박스_텍스트 ~= 기대됩니다 그리고나서 highlight_flight = 진실의 끝. 끝. 현지의 서식 지정 = (옵션들 그리고. 옵션들.노비키 그리고. mw.본문.노비키) 또는 return_vargs 현지의 에 있어서 다른 = 자신.에 있어서 다른 그리고. ('\n' .. 첫째_차이(기대됩니다, 실시간 텍스트) 또는 첫째_차이(기대됩니다, 샌드박스_텍스트)) 또는 '' 결과_표:삽입하다( '\n', mw.본문.노비키(생방송의), 해야 할 그리고. 하이라이트_라이브 그리고. '\nstyle="배경: #fc0;" 또는 '\n', 서식 지정(실시간 텍스트), 해야 할 그리고. highlight_flight 그리고. '\nstyle="배경: #fc0;" 또는 '\n', 서식 지정(샌드박스_텍스트), '\n', 서식 지정(기대됩니다), 에 있어서 다른, "\n-\n" ) 끝. 기능. 유닛 테스터:preprocess_message_process_many(접두사 1, 접미사 1, 접두사 2, 접미사 2, 경우들, 옵션들) 위해서 _, 사례. 에 짝을 짓다(경우들) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 자신:preprocess_process_process(접두사 1 .. 사례.[1] .. 접미사 1, 접두사 2 .. (사례.[2] 그리고. 사례.[2] 또는 사례.[1]) .. 접미사 2, 옵션들) 끝. 끝. 기능. 유닛 테스터:preprocess_process_message_many(모듈, function_name, 경우들, 옵션들) 위해서 _, 사례. 에 짝을 짓다(경우들) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 현지의 생방송의 = 모듈 .. " " .. function_name .. " " .. 사례.[1] .. "}}" 현지의 샌드박스 = 모듈 .. "/filename" .. function_name .. " " .. 사례.[1] .. "}}" 자신:preprocess_messages_messages(생방송의, 샌드박스, 사례.[2], 옵션들) 끝. 끝. 기능. 유닛 테스터:동등한(이름., 실제., 기대됩니다, 옵션들) num_html = num_html + 1 한다면 실제. == 기대됩니다 그리고나서 결과_표:삽입하다(' ', 똑딱이) 또 다른 결과_표:삽입하다(' ', 건너다) num_html = num_html + 1 끝. 현지의 서식 지정 = (옵션들 그리고. 옵션들.노비키 그리고. mw.본문.노비키) 또는 return_vargs 현지의 에 있어서 다른 = 자신.에 있어서 다른 그리고. ('\n' .. 첫째_차이(기대됩니다, 실제.)) 또는 '' 현지의 과시하는 = 옵션들 그리고. 옵션들.과시하는 또는 return_vargs 결과_표:삽입하다('\n', 이름., '\n', 서식 지정(끈으로 묶는(과시하는(기대됩니다))), '\n', 서식 지정(끈으로 묶는(과시하는(실제.))), 에 있어서 다른, "\n-\n") 끝. 현지의 기능. 깊은 곳에 있는(t1, t2, ignore_mt) 현지의 ty1 = 유형(t1) 현지의 ty2 = 유형(t2) 한다면 ty1 ~= ty2 그리고나서 돌아가다 거짓의 끝. 한다면 ty1 ~= '탁자' 그리고. ty2 ~= '탁자' 그리고나서 돌아가다 t1 == t2 끝. 현지의 mt = 배불리 먹다(t1) 한다면 것은 아니다. ignore_mt 그리고. mt 그리고. mt.__eq 그리고나서 돌아가다 t1 == t2 끝. 위해서 k1, v1 에 쌍들(t1) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 현지의 v2 = t2[k1] 한다면 v2 == 영의 또는 것은 아니다. 깊은 곳에 있는(v1, v2) 그리고나서 돌아가다 거짓의 끝. 끝. 위해서 k2, v2 에 쌍들(t2) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 현지의 v1 = t1[k2] 한다면 v1 == 영의 또는 것은 아니다. 깊은 곳에 있는(v1, v2) 그리고나서 돌아가다 거짓의 끝. 끝. 돌아가다 진실의 끝. 현지의 기능. val_to_str(obj) 현지의 기능. table_key_to_str(k) 한다면 유형(k) == '끈' 그리고. mw.ustring.경기(k, '^[_%a][_%a%d]*