C#Directory.GetCurrentDirectory()返回带有NUnit的system32
我正在使用第三方nuget软件包为木偶演员。我无法获得任何涉及此库的代码。我查看了代码,发现了以下代码行C#Directory.GetCurrentDirectory()返回带有NUnit的system32,c#,unit-testing,visual-studio-2017,nunit,C#,Unit Testing,Visual Studio 2017,Nunit,我正在使用第三方nuget软件包为木偶演员。我无法获得任何涉及此库的代码。我查看了代码,发现了以下代码行 DownloadsFolder = Path.Combine(Directory.GetCurrentDirectory(), ".local-chromium"); 问题是,当我运行一个单元测试目录时,GetCurrentDirectory()返回Windows/system32,代码失败,因为它没有写入此目录的权限 这似乎是有意的行为。这里的问题是我不能修改这个dll的源代码,所以我被
DownloadsFolder = Path.Combine(Directory.GetCurrentDirectory(), ".local-chromium");
问题是,当我运行一个单元测试目录时,GetCurrentDirectory()
返回Windows/system32
,代码失败,因为它没有写入此目录的权限
这似乎是有意的行为。这里的问题是我不能修改这个dll的源代码,所以我被卡住了。有没有办法修改nunit,使其返回一个我可以为
目录定义的目录。GetCurrentDirectory()
?如果我理解正确,调用目录。GetCurrentDirectory
的代码位于您正在测试的应用程序使用的库中。(如果是在您自己的NUnit测试中,那么这个答案必须是不同的。)对于库代码来说,这是一个错误的设计选择,因为它假设调用库的应用程序已将当前目录设置(或保留)到适当的位置。(依我看,应用程序可以这样做,但不是库。)
我猜您是在VisualStudio下运行的,因为当前目录最终是System32
按照设计,NUnit本身从不更改当前目录,因此它与程序第一次运行时一样。您可以在测试中更改它,但这样做有风险
这就解释了为什么你会看到这个问题。这里有一个解决办法
ParallelizableAttribute
,您应该可以。但是,如果在程序集或其他更高级别将其设置为某个值,请将包含这些测试的类标记为[非并行]
最后一步非常重要。当前目录是为整个进程设置的,因此它将影响所有正在执行的测试。重要的是,在更改的目录生效时,不要运行其他测试。如果我理解正确,调用
目录.GetCurrentDirectory
的代码位于您正在测试的应用程序使用的库中。(如果是在您自己的NUnit测试中,那么这个答案必须是不同的。)对于库代码来说,这是一个错误的设计选择,因为它假设调用库的应用程序已将当前目录设置(或保留)到适当的位置。(依我看,应用程序可以这样做,但不是库。)
我猜您是在VisualStudio下运行的,因为当前目录最终是System32
按照设计,NUnit本身从不更改当前目录,因此它与程序第一次运行时一样。您可以在测试中更改它,但这样做有风险
这就解释了为什么你会看到这个问题。这里有一个解决办法
ParallelizableAttribute
,您应该可以。但是,如果在程序集或其他更高级别将其设置为某个值,请将包含这些测试的类标记为[非并行]
最后一步非常重要。当前目录是为整个进程设置的,因此它将影响所有正在执行的测试。重要的是,在更改的目录生效时,不要运行其他测试。在调用该代码之前,您可以执行
目录.SetCurrentDirectory
吗?在调用该代码之前,您可以执行目录.SetCurrentDirectory
吗?