如何对运行PowerShell脚本的C#库进行单元测试



我有一个C#库,它运行几个PowerShell脚本来操作Windows Hypervisor。(例如,打开和关闭VM,用vhds创建VM,获取开关等(很难模拟环境并控制脚本的输出。用于检查/验证内容的脚本可能更容易,但用于操作目的的脚本可能会令人头疼,因为这些方法中的大多数都可能是不可逆转的。

我发现了一个很好的PowerShell单元测试框架Pester。但是我的代码包含了大量的C#代码。有什么好的方法可以优雅地处理这个单元测试问题吗?

提前感谢!

这里有几个要点:

  1. 当你测试的代码做多件事(单元(时,根据定义,它是一个集成测试,因为它测试多个单元的集成(@Xerillio的评论(
  2. 当您测试的代码与基础设施(文件系统、数据库,在您的情况下是Powershell和VM等(交互时,根据定义,它就是一个集成测试

您可以尝试在C#中的单独函数中提取少量代码,并对其进行单元测试,从而确定这些工作,并在Powershell中执行相同的操作(使用Pester(。但真正的问题是;你想实现什么?我假设您希望确保您的应用程序现在可以工作,并在未来继续工作(不会倒退(,在这种情况下,您可以更多地研究一种更的端到端的测试方法。

  • 用测试中可以交互的内容找到应用程序的最外部点,这样就可以测试堆栈的最大部分
  • 检查可以自动测试哪些部件而不会造成严重破坏(您提到"不可逆方法"(
  • 使用单元测试框架在C#(如xUnit(中设置测试,分别表示清晰的SetupTeardown阶段,分别在测试前设置所需的一切,并在测试后进行清理(请记住,默认情况下测试可能并行运行,这与文件系统上的共享资源不兼容等(

这避免了因为你想单元测试而不得不重写代码。另一方面,提取纯单元可以更容易地测试那些特定的单元。

最新更新