Del via


Håndtering av enhetstesting

Merk

Dette innholdet gjelder for den eldre Power Query SDK-en i Visual Studio. I dag inneholder den nye SDK-en for Power Query i Visual Studio Code et fullstendig utvalgt testrammeverk som vi oppfordrer deg til å teste og lære mer.

For både enkle og komplekse koblinger er det å legge til enhetstester en anbefalt fremgangsmåte og anbefales på det sterkeste.

Enhetstesting utføres i konteksten til Power Query SDK for Visual Studio. Hver test defineres som et Fact navn, en forventet verdi og en faktisk verdi. I de fleste tilfeller vil den faktiske verdien være et M-uttrykk som tester en del av uttrykket.

Vurder en enkel utvidelse som eksporterer tre funksjoner:

section Unittesting;

shared UnitTesting.ReturnsABC = () => "ABC";
shared UnitTesting.Returns123 = () => "123";
shared UnitTesting.ReturnTableWithFiveRows = () => Table.Repeat(#table({"a"},{{1}}),5);

Denne enhetstestkoden består av mange fakta, og en rekke vanlige koder for rammeverket for enhetstest (ValueToText, , FactFacts, Facts.Summarize). Følgende kode inneholder et eksempelsett med fakta (gå til UnitTesting.query.pq for den vanlige koden):

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];

Hvis du kjører eksemplet i Visual Studio, evalueres alle fakta og gir deg et visuelt sammendrag av passratene:

Eksempel på passsatser.

Implementering av enhetstesting tidlig i tilkoblingsutviklingsprosessen gjør det mulig å følge prinsippene for testdrevet utvikling. Tenk deg at du må skrive en funksjon som bare Uri.GetHost returnerer vertsdataene fra en URI. Du kan begynne med å skrive et testtilfelle for å bekrefte at funksjonen utfører den forventede funksjonen på riktig måte:

Fact("Returns host from URI",
    "https://bing.com",
    Uri.GetHost("https://bing.com/subpath/query?param=1&param2=hello")
),
Fact("Handles port number appropriately",
    "https://bing.com:8080",
    Uri.GetHost("https://bing.com:8080/subpath/query?param=1&param2=hello")
)

Flere tester kan skrives for å sikre at funksjonen håndterer kanttilfeller på riktig måte.

En tidlig versjon av funksjonen kan bestå noen, men ikke alle tester:

Uri.GetHost = (url) =>
    let
        parts = Uri.Parts(url)
    in
        parts[Scheme] & "://" & parts[Host]

Noen tester mislykkes.

Den endelige versjonen av funksjonen bør bestå alle enhetstester. Dette gjør det også enkelt å sikre at fremtidige oppdateringer av funksjonen ikke fjerner noen av de grunnleggende funksjonene ved et uhell.

Alle tester består.