Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
Este contenido es aplicable al SDK de Power Query heredado en Visual Studio. En la actualidad, el nuevo SDK de Power Query en Visual Studio Code contiene un marco de pruebas completo que le animamos a probar y obtener más información.
Para conectores simples y complejos, agregar pruebas unitarias es un procedimiento recomendado y muy recomendable.
Las pruebas unitarias se realizan en el contexto del SDK de Power Query de Visual Studio. Cada prueba se define como que Fact tiene un nombre, un valor esperado y un valor real. En la mayoría de los casos, el "valor real" es una expresión M que prueba parte de la expresión.
Considere una extensión que exporte tres funciones:
section Unittesting;
shared UnitTesting.ReturnsABC = () => "ABC";
shared UnitTesting.Returns123 = () => "123";
shared UnitTesting.ReturnTableWithFiveRows = () => Table.Repeat(#table({"a"},{{1}}),5);
Este código de prueba unitaria se compone de muchos hechos y un montón de código común para el marco de pruebas unitarias (ValueToText, Fact, Facts, Facts.Summarize). El código siguiente proporciona un conjunto de hechos de ejemplo (vaya a UnitTesting.query.pq para el código común):
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];
Al ejecutar el ejemplo en Visual Studio se evalúan todos los hechos y se proporciona un resumen visual de las tasas de aprobación:
La implementación de pruebas unitarias al principio del proceso de desarrollo del conector le permite seguir los principios del desarrollo controlado por pruebas. Imagine que necesita escribir una función denominada Uri.GetHost que devuelve solo los datos del host de un URI. Puede empezar escribiendo un caso de prueba para comprobar que la función realiza correctamente la función esperada:
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")
)
Se pueden escribir más pruebas para asegurarse de que la función controla correctamente los casos perimetrales.
Una versión temprana de la función puede pasar algunas pruebas, pero no todas:
Uri.GetHost = (url) =>
let
parts = Uri.Parts(url)
in
parts[Scheme] & "://" & parts[Host]
La versión final de la función debe superar todas las pruebas unitarias. Esta versión también facilita la seguridad de que las actualizaciones futuras de la función no quiten accidentalmente ninguna de sus funcionalidades básicas.