Rough first go at test coverage. Might need tidying up.

This commit is contained in:
Philip Wood
2017-05-06 17:53:44 +01:00
parent f0205758ba
commit 0507806aae
5 changed files with 83 additions and 11 deletions

View File

@ -1,6 +1,10 @@
#tool "nuget:?package=GitVersion.CommandLine"
#tool "nuget:?package=GitReleaseNotes"
#addin "nuget:?package=Cake.Json"
#tool "nuget:?package=OpenCover"
#tool "nuget:?package=ReportGenerator"
#tool coveralls.net
#addin Cake.Coveralls
// compile
var compileConfig = Argument("configuration", "Release");
@ -12,6 +16,8 @@ var artifactsDir = Directory("artifacts");
// unit testing
var artifactsForUnitTestsDir = artifactsDir + Directory("UnitTests");
var unitTestAssemblies = @"./test/Ocelot.UnitTests/Ocelot.UnitTests.csproj";
var minCodeCoverage = 75d;
var coverallsRepoToken = "coveralls-repo-token-ocelot";
// acceptance testing
var artifactsForAcceptanceTestsDir = artifactsDir + Directory("AcceptanceTests");
@ -118,13 +124,69 @@ Task("RunUnitTests")
.IsDependentOn("Compile")
.Does(() =>
{
var settings = new DotNetCoreTestSettings
if (IsRunningOnWindows())
{
Configuration = compileConfig,
};
var coverageSummaryFile = artifactsForUnitTestsDir + File("coverage.xml");
EnsureDirectoryExists(artifactsForUnitTestsDir);
OpenCover(tool =>
{
tool.DotNetCoreTest(unitTestAssemblies);
},
new FilePath(coverageSummaryFile),
new OpenCoverSettings()
{
Register="user",
ArgumentCustomization=args=>args.Append(@"-oldstyle -returntargetcode")
}
.WithFilter("+[Ocelot*]*")
.WithFilter("-[xunit*]*")
.WithFilter("-[Ocelot*Tests]*")
);
ReportGenerator(coverageSummaryFile, artifactsForUnitTestsDir);
if (!AppVeyor.IsRunningOnAppVeyor)
{
var repoToken = EnvironmentVariable(coverallsRepoToken);
if (string.IsNullOrEmpty(repoToken))
{
throw new Exception(string.Format("Coveralls repo token not found. Set environment variable '{0}'", coverallsRepoToken));
}
EnsureDirectoryExists(artifactsForUnitTestsDir);
DotNetCoreTest(unitTestAssemblies, settings);
Information("Uploading test coverage to coveralls.io");
CoverallsNet(coverageSummaryFile, CoverallsNetReportType.OpenCover, new CoverallsNetSettings()
{
RepoToken = repoToken
});
}
else
{
Information("We are not running on the build server so we won't publish the coverage report to coveralls.io");
}
var sequenceCoverage = XmlPeek(coverageSummaryFile, "//CoverageSession/Summary/@sequenceCoverage");
var branchCoverage = XmlPeek(coverageSummaryFile, "//CoverageSession/Summary/@branchCoverage");
Information("Sequence Coverage: " + sequenceCoverage);
if(double.Parse(sequenceCoverage) < minCodeCoverage)
{
throw new Exception(string.Format("Code coverage fell below the threshold of {0}%", minCodeCoverage));
};
}
else
{
var settings = new DotNetCoreTestSettings
{
Configuration = compileConfig,
};
EnsureDirectoryExists(artifactsForUnitTestsDir);
DotNetCoreTest(unitTestAssemblies, settings);
}
});
Task("RunAcceptanceTests")