Unit testing
Writing a unit test
[TestClass] public class UnitTest1 { private static RunspaceConfiguration config; private static Runspace runspace; private static Pipeline pipe; private static Command command; [ClassInitialize] public static void TestFixtureSetup(TestContext context) { config = RunspaceConfiguration.Create(); PSSnapInException warning; config.AddPSSnapIn("SnapinName", out warning); runspace = RunspaceFactory.CreateRunspace(config); runspace.Open(); } [ClassCleanup] public static void TestFixtureTeardown() { runspace.Close(); } [TestInitialize] public void Setup() { pipe = runspace.CreatePipeline(); command = new Command("CommandName"); pipe.Commands.Add(command); } [TestMethod] public void TestMethod1() { command.Parameters.Add(new CommandParameter("ParameterName", "Value")); var psObject = pipe.Invoke(); } }
Snapin couldn't be found
I wrote a unit test against one of my commands but it couldn't find my snapin, I got the following exception:
System.Management.Automation.PSArgumentException: System.Management.Automation.PSArgumentException: The Windows PowerShell snap-in '...' is not installed on this computer..
I could use my snapin from Powershell command line.
Solution
Add the following lines as post-build events:
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe $(TargetPath)
c:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe $(TargetPath)
Both 32-bit and 64-bit installation will happen this way.
Cause
Visual Studio 2012 is a 32-bit process. I registered with 64-bit install util only. Now I register both versions.