In my last post Creating a Local Build with psake, Part 1: Compiling I showed how you could compile a solution with psake. This time we will expand our build script and include a task that will run all the tests in our solution using NUnit 2.5.10.
The output from building is often referred to as build artifacts. I like to configure the output of the projects in my solution so that they output to a folder called “build_artifacts”. In my example solution I have two projects. An WPF application and a test class library:
I have configured them so that the output from building with Debug is output to the “build_artifacts”-directory:
Now that the compilation outputs to our build artifacts folder we can make a psake task that finds all the test assemblies in “build_artifacts\Debug\Tests” and runs them with NUnit:
properties {
$base_dir = resolve-path .\..
$source_dir = "$base_dir\src"
$build_artifacts_dir = "$base_dir\build_artifacts"
$tools_dir = "$base_dir\tools"
$config = "Debug"
$test_dir = "$build_artifacts_dir\$config\Tests"
}
task test {
$testassemblies = get-childitem $test_dir -recurse -include *tests*.dll
exec {
& $tools_dir\NUnit-2.5.10\nunit-console-x86.exe $testassemblies /nologo /nodots /xml=$test_dir\tests_results.xml;
}
}
Here I have defined some extra properties to make the script more readable and maintainable. We now have to remember to make the “local” task dependent on “test”. Let’s also add a “clean” task that deletes the build artifacts folder and recreates it:
task clean {
rd $build_artifacts_dir -recurse -force -ErrorAction SilentlyContinue | out-null
mkdir $build_artifacts_dir -ErrorAction SilentlyContinue | out-null
}
Our build script now loos like this:
$framework = '4.0'
properties {
$base_dir = resolve-path .\..
$source_dir = "$base_dir\src"
$build_artifacts_dir = "$base_dir\build_artifacts"
$tools_dir = "$base_dir\tools"
$config = "Debug"
$test_dir = "$build_artifacts_dir\$config\Tests"
}
task default -depends local
task local -depends compile, test
task compile -depends clean {
exec { msbuild $source_dir\ContinuousDelivery.sln /t:Clean /t:Build /p:Configuration=$config /v:q /nologo }
}
task clean {
rd $build_artifacts_dir -recurse -force -ErrorAction SilentlyContinue | out-null
mkdir $build_artifacts_dir -ErrorAction SilentlyContinue | out-null
}
task test {
$testassemblies = get-childitem $test_dir -recurse -include *tests*.dll
exec {
& $tools_dir\NUnit-2.5.10\nunit-console-x86.exe $testassemblies /nologo /nodots /xml=$test_dir\tests_results.xml;
}
}
If we run build.bat we now get the following output:
We have now successfully run our tests with psake! This concludes how you can create a local build with psake. There might more to this than what I’ve shown, but I think this should be enough to get you going.
You can download the source code from GitHub.
No comments:
Post a Comment