Coverlet – wykluczanie badania pokrycia kodu według atrybutów

W niniejszej notatce pokażę jak wykluczyć poszczególne klasy z badania pokrycia kodu oraz dodać odpowiednią konfigurację do Nuke.

Wykluczanie przez atrybut (ExcludeByAttribute)

W trakcie mojego dążenia do 100% pokrycia kodu testami jednostkowymi stanąłem przed problemem, jakim jest wykluczenie kodu generowanego automatycznie. Niestety tę informację było mi znaleźć strasznie ciężko, dlatego dziele się tym tutaj.

Jak pokazuje dokumentacja, każdy atrybut przeznaczony do wykluczenia należy przekazać osobno:

--exclude-by-attribute 'Obsolete' --exclude-by-attribute'GeneratedCode' --exclude-by-attribute 'CompilerGenerated'

czyli bardziej całościowy przykład:

coverlet /path/to/test-assembly.dll --target "dotnet" --targetargs "test /path/to/test-project --no-build" --exclude-by-attribute 'Obsolete' --exclude-by-attribute'GeneratedCode'

Nuke

Aby dodać wykluczenie do Nuke, należy zmodyfikować parametry badania pokrycia kodu testami jednostkowymi. Biorąc kawałek kodu z drugiej części o Nuke, należałoby dodać jedną linijkę:

CoverletSettings PrepareCoverageSettingsForCoveringProject(Project project, CoverletSettings settings,
    DotNetTestSettings coverageTestSettings, ref string previousCoverageFileResult)
{
    var assemblyPath = FindAssemblyForProject(project);
    var coverageResultDirectory = TestResultDirectory / project.Name;

    settings = settings
        .SetAssembly(assemblyPath)
        .SetProcessArgumentConfigurator(_ => _.Add(@"--exclude-by-attribute CompilerGeneratedAttribute --exclude-by-attribute GeneratedCodeAttribute")) (1)
        .SetOutput(coverageResultDirectory + "/")
        .SetTargetSettings(coverageTestSettings
            .EnableNoBuild()
            .SetProjectFile(project));

    settings = MergeCoverageResultsWithPreviousRun(previousCoverageFileResult, settings);
    previousCoverageFileResult = SetThresholdForLastRun(project, coverageResultDirectory, ref settings);

    return settings;
}
1 Ta jedna linijka wystarczy, aby wykluczyć kod oznaczony atrybutami CompilerGeneratedAttribute oraz GeneratedCodeAttribute.
comments powered by Disqus
Proszę pamiętaj, że blog jest na ten moment w wersji poglądowej i może zawierać wiele błędów (ale nie merytoycznych!). Mimo to mam nadzieję, że blog Ci się podoba! Wiele ilustracji pojawiło się na blogu dzięki unsplash.com!
Zbudowano z Hugo
Motyw Stack zaprojektowany przez Jimmy