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