단위 테스트 처리
참고 항목
이 콘텐츠는 Visual Studio의 레거시 파워 쿼리 SDK에 적용됩니다. 현재 Visual Studio Code의 새로운 파워 쿼리 SDK에는 테스트하고 자세히 알아보는 것이 좋습니다.
단순 커넥터와 복잡한 커넥터의 경우 단위 테스트를 추가하는 것이 가장 좋은 방법이며 매우 권장됩니다.
단위 테스트는 Visual Studio의 파워 쿼리 SDK 컨텍스트에서 수행됩니다. 각 테스트는 이름, 예상 값 및 실제 값이 있는 것으로 Fact
정의됩니다. 대부분의 경우 "실제 값"은 식의 일부를 테스트하는 M 식입니다.
다음 세 가지 함수를 내보내는 간단한 확장을 고려합니다.
section Unittesting;
shared UnitTesting.ReturnsABC = () => "ABC";
shared UnitTesting.Returns123 = () => "123";
shared UnitTesting.ReturnTableWithFiveRows = () => Table.Repeat(#table({"a"},{{1}}),5);
이 단위 테스트 코드는 많은 팩트와 단위 테스트 프레임워크(ValueToText
, Fact
, Facts
Facts.Summarize
)에 대한 많은 공통 코드로 구성됩니다. 다음 코드는 팩트의 예제 집합을 제공합니다(공통 코드의 경우 UnitTesting.query.pq 로 이동).
section UnitTestingTests;
shared MyExtension.UnitTest =
[
// Put any common variables here if you only want them to be evaluated once
// Fact(<Name of the Test>, <Expected Value>, <Actual Value>)
facts =
{
Fact("Check that this function returns 'ABC'", // name of the test
"ABC", // expected value
UnitTesting.ReturnsABC() // expression to evaluate (let or single statement)
),
Fact("Check that this function returns '123'",
"123",
UnitTesting.Returns123()
),
Fact("Result should contain 5 rows",
5,
Table.RowCount(UnitTesting.ReturnTableWithFiveRows())
),
Fact("Values should be equal (using a let statement)",
"Hello World",
let
a = "Hello World"
in
a
)
},
report = Facts.Summarize(facts)
][report];
Visual Studio에서 샘플을 실행하면 모든 팩트를 평가하고 통과 속도에 대한 시각적 요약을 제공합니다.
커넥터 개발 프로세스 초기에 단위 테스트를 구현하면 테스트 기반 개발의 원칙을 따를 수 있습니다. URI에서 호스트 데이터만 반환하는 함수를 Uri.GetHost
작성해야 한다고 상상해 보십시오. 먼저 테스트 사례를 작성하여 함수가 예상된 함수를 적절하게 수행하는지 확인할 수 있습니다.
Fact("Returns host from URI",
"https://bing.com",
Uri.GetHost("https://bing.com/subpath/query?param=1¶m2=hello")
),
Fact("Handles port number appropriately",
"https://bing.com:8080",
Uri.GetHost("https://bing.com:8080/subpath/query?param=1¶m2=hello")
)
함수가 에지 케이스를 적절하게 처리하도록 더 많은 테스트를 작성할 수 있습니다.
함수의 초기 버전은 일부 테스트를 통과하지만 일부 테스트는 통과하지 못할 수 있습니다.
Uri.GetHost = (url) =>
let
parts = Uri.Parts(url)
in
parts[Scheme] & "://" & parts[Host]
함수의 최종 버전은 모든 단위 테스트를 통과해야 합니다. 이렇게 하면 함수에 대한 향후 업데이트가 기본 기능을 실수로 제거하지 않도록 쉽게 할 수 있습니다.