Del via


Test af håndteringsenhed

Notat

Dette indhold gælder for det ældre Power Query SDK i Visual Studio. I dag indeholder det nye Power Query SDK i Visual Studio Code en teststruktur med alle funktioner, som vi opfordrer dig til at teste og få mere at vide.

For både enkle og komplekse konnektorer er tilføjelse af enhedstest en bedste praksis og anbefales stærkt.

Enhedstest udføres i forbindelse med Visual Studios Power Query SDK. Hver test er defineret som en Fact , der har et navn, en forventet værdi og en faktisk værdi. I de fleste tilfælde er den "faktiske værdi" et M-udtryk, der tester en del af dit udtryk.

Overvej en udvidelse, der eksporterer tre funktioner:

section Unittesting;

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

Denne enhedstestkode består af mange fakta og en masse fælles kode for enhedstestrammen (ValueToText, Fact, Facts, Facts.Summarize). Følgende kode indeholder et eksempel på et sæt fakta (gå til UnitTesting.query.pq for at få den almindelige kode):

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

Når du kører eksemplet i Visual Studio, evalueres alle fakta og får en visuel oversigt over gennemsynsprocenterne:

Skærmbillede af Visual Studio M-forespørgselsoutputtet, der viser et eksempel på gennemløbsrater.

Implementering af enhedstest tidligt i connectorudviklingsprocessen giver dig mulighed for at følge principperne for testdrevet udvikling. Forestil dig, at du skal skrive en funktion, der kaldes Uri.GetHost , der kun returnerer værtsdataene fra en URI. Du kan starte med at skrive en testcase for at kontrollere, at funktionen udfører den forventede funktion korrekt:

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")
)

Der kan skrives flere tests for at sikre, at funktionen håndterer kantsager korrekt.

En tidlig version af funktionen kan bestå nogle, men ikke alle test:

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

Skærmbillede af Visual Studio M-forespørgselsoutputtet, hvor nogle test mislykkes.

Den endelige version af funktionen skal bestå alle enhedstest. Denne version gør det også nemt at sikre, at fremtidige opdateringer til funktionen ikke ved et uheld fjerner nogen af dens grundlæggende funktioner.

Skærmbillede af Visual Studio M-forespørgselsoutputtet, hvor alle test består.