비고
이 콘텐츠는 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, FactsFacts.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]
함수의 최종 버전은 모든 단위 테스트를 통과해야 합니다. 또한 이 버전을 사용하면 함수에 대한 향후 업데이트가 기본 기능을 실수로 제거하지 않도록 쉽게 확인할 수 있습니다.