我有一个我想用xUnit测试的类。此类在构造函数中加载包含此类配置的.json文件。默认情况下,此json文件从当前目录加载。这在我的应用程序中工作正常,因为它可以解析当前的工作目录。此json文件具有Build Action = Content
和Copy to output directory = Copy Always
,以确保文件始终位于DLL文件的旁边。
但是,当从VisualStudio测试运行器中调用测试时,DLL将从临时文件位置运行:C:\Users\<username>\AppData\Local\Temp\3c081508-0a25-45f0-8813-48d4fcabccaa\3c081508-0a25-45f0-8813-48d4fcabccaa\assembly\dl3\4175808c\f164e239_d1a1d201\SomeLibrary.dll
其中每个所需的DDL都在一个单独的文件中,并且.json文件无处可去看到。这意味着从当前ddl位置加载.json文件的代码失败。从VisualStudio中或从xUnit.console应用程序中运行测试时,会发生此功能。
为了解决这个问题,我添加了一个配置选项,如果存在该配置选项(我只添加到我的测试项目中),则使用该路径而不是尝试从当前ddl加载路径。但是现在这在竹子中失败了,因为在构建服务器上执行时该路径无效。
无论如何以编程方式获取临时路径到.json文件的位置......或者某种方式禁用这些临时文件并只使用项目构建目录中的实际bin目录用于VisualStudio测试运行器?
目前使用VisualStudio 2017和xUnit 2.2.0。
干杯, 贾斯汀
答案 0 :(得分:0)
xunit测试有一个名为正在测试的影子副本程序集的选项。它确保将正在测试的程序集复制到其他位置,以允许在运行时修改原始程序集,而不会影响测试。 关闭此功能应该对您的情况有所帮助。
可以在Visual Studio中关闭正在测试的卷影复制程序集 Resharper - &gt; 选项 - &gt; 工具 - &gt; 单元测试 - &gt; 正在测试的影子复制程序集。