在控制台中运行xunit

10

我有一个可能很蠢的问题。

我正在尝试从命令提示符中运行 xunit dll。

我发现我需要将以下dll放置在命令提示符所在的文件夹中。

xUnit.Console.exe,xunit.console.exe.config,xunit.dll,xunit.runner.utility.dll

这还好吧,但我无法运行我的测试。

起初,我尝试使用相对路径指向我的测试dll,但没有成功。

然后我将测试dll放在上述dll所在的文件夹中运行。现在的结果是它说我的测试dll缺少一个依赖项。

于是我把xunit文件和我的测试项目dll一起放在bin文件夹中,但它告诉我它甚至找不到与其并排的测试dll。

这一切似乎都很困难,我想做的是在以下结构的基础上完成:

--src

----tools

------xUnit

--------all my xunit dlls

----projects

------MyTestProject

-------bin

---------MyTestProject.dll

假设

c:\Src\Tools\xUnit>xunit.console ..\\..\Projects\MyTestProject\bin\MyTestProject.dll
4个回答

3

两种解决方案: 1)将C:\src\Tools\xUnit添加到您的PATH环境变量中,并在当前目录为C:\src\projects\MyTestProject\bin的命令提示符中运行xunit控制台应用程序。 2)按照第一个建议,但不是将其放入PATH环境变量中,而是在命令行上指定xunit.console.exe的整个路径(相对或绝对)作为要运行的可执行文件。


7
能否请下投票者解释一下为什么这个答案对他们没起作用? - Josh Gallagher

1
  • Run the Command Prompt

  • Run the next command and replace 'path_to_xunit_console' with the path of xunit console

    set PATH=%PATH%;path_to_xunit_console_exe
    
  • move to location of your unit test binary project:

    cd  my_test_binary_folder   
    
  • Run the next command and save the logs to xml file:

    xunit.console your_test_dll_file   -xml testlog.xml
    

要了解不同的选项,请运行:

   xunit.console -?

您可以通过在二进制测试文件夹中创建一个批处理文件test.cmd来自动化这些步骤:
 set PATH=%PATH%;path_to_xunit_console_exe
 xunit.console your_test_dll_file   -xml testlog.xml

1

找到 xUnitConsole.exe 的方法 在包中搜索

%userprofile%\.nuget\packages

.nuget\packages\xunit.runner.console->您的版本已安装->工具->xUnitConsole.exe


0

我最终在C#中构建了一个xUnit控制台测试运行器,以循环遍历并运行给定文件夹中的所有xUnit测试程序集。

我最终得到的结构是xUnit测试运行器,命名为RunXUnitTests,在测试程序集的上一级文件夹中,包括可执行文件和所需的各种支持dll。例如,NLog日志记录支持和用于发送结果电子邮件的一些电子邮件支持dll位于此RunXUnitTests文件夹中。

在RunXUnitTests测试运行器文件夹的下方,有一个“TestAssemblies”文件夹,所有的xUnit测试程序集dll都放在该文件夹中,以及测试本身所需的任何支持dll。此外,所有的xunit.console.exe运行时文件都在TestAssemblies文件夹中。将所有测试及其依赖项放在同一TestAssemblies文件夹中,与测试运行器分开,这样最不容易混淆。

要运行测试,从控制台,C#测试运行器应用程序将向System.Diagnostics进程执行API提交命令行,其中xunit.console.exe命令作为要运行的进程,而测试程序集和(xml)结果文件则作为命令行参数。

一个典型的命令行,用于操作准备测试(ORT),由测试运行器格式化,并提交给 process.Start() 方法调用(其中进程对象类型为 System.Diagnostics.Process),如下所示:
"C:\RunXUnitTests\TestAssemblies\xunit.console.exe" "C:\RunXUnitTests\TestAssemblies\SharePointBasicFeaturesORT.dll"  -xml "C:\Users\Public\Documents\TestResults\SharePointBasicFeaturesORT.xml"

测试运行后,测试运行程序有一些例程来遍历XML结果文件,提取结果,格式化结果摘要电子邮件(以HTML格式),并将电子邮件发送到分发列表。

我应该提到,所有这些都打包成可安装的MSI文件,可以部署到Windows 7/10个人电脑或虚拟机上进行测试运行。我们正在使用它来在预定的每日基础上运行SpecFlow+xUnit“运营准备测试”以测试我们的Web应用程序。我们使用Wix#(“WixSharp”)安装程序在C#中构建我们的安装程序,然后使用Wix安装工具集构建标准的MSI安装程序文件。有关更多信息、源代码和二进制文件,请参见https://github.com/oleg-shilo/wixsharp。一旦你掌握了它,它就非常好用。

是的,这种方法需要做很多工作。如果你的组织已经有其他可以完成这项工作的DevOps类型工具,比如Jenkins、TeamCity、Bamboo、Azure for DevOps等,我不建议使用这种方法。我的组织仍在“进行中”引入这些工具,而在短期内改进测试运行器比获得组织决策、财务承诺和安装配置支持DevOps/CI工具更可行。

如果你没有准备好使用DevOps/CI工具,这种方法使用免费的开源工具(除了MS Visual Studio的付费版本;我不知道社区版是否适用)并且可以作为通向更复杂环境的桥梁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接