我正在尝试为私人项目设置一些单元测试。由于我不介意确切的跑步者,我尝试了NUnit,XUnit和MStest,但到目前为止都没有。
经过一些研究,我在这里克隆了官方的Microsoft存储库:https://github.com/dotnet/docs/blob/master/samples/core/getting-started/unit-testing-using-nunit/PrimeService.Tests/PrimeService_IsPrimeShould.cs但是这些测试也无法执行。这样做时,我在输出中收到以下错误:
System.ArgumentException:路径中的非法字符。在System.IO.Path.CheckInvalidPathChars(String path,Boolean checkAdditional)at System.IO.Path.Combine(String path1,String path2)at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Helpers.DotnetHostHelper.TryGetExecutablePath(String executableBaseName,String&executablePath) )在Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Helpers.DotnetHostHelper.GetDotnetPath()在Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Hosting.DotnetTestHostManager.GetTestHostProcessStartInfo(IEnumerable
1 sources, IDictionary
2 environmentVariables,TestRunnerConnectionInfo connectionInfo)在Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyOperationManager Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyDiscoveryManager.DiscoverTests(DiscoveryCriteria discoveryCriteria,ITestDiscoveryEventsHandler2 eventHandler)中的.SetupChannel(IEnumerable`1 sources,CancellationToken cancellationToken)
我还检查了几个SO答案,如Unit Tests not discovered in Visual Studio 2017或How to run NUnit tests in Visual Studio 2017?,但没有一个解决了问题。
我的Visual Studio 2017版本目前是15.6.0,我也在使用ReSharper。这似乎是一个当地的环境问题,遗憾的是,我没有找到任何有关该问题的提示。有谁有想法,这个问题怎么解决?
在我的情况下,当我将VS2017更新到15.6.4版时,问题就消失了。
在大型解决方案上从NUnit转移到XUnit后,我遇到了完全相同的问题。
我尝试创建一个只包含一个虚拟测试的新项目。这也表明了问题,这意味着它是环境问题。
我最终发现Git在PATH环境变量的条目周围放置了双引号,如下所示:
...;“C:\ Program Files(x86)\ Git \ bin”; ...
不幸的是,我的路径很长(3600个字符),所以Windows GUI不会让我改变它,因为它超过2047个字符。
我能够通过更改Windows注册表中存储在计算机\ HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Control \ Session Manager \ Environment中的路径来更正它
我可以通过将引号重新添加到Path环境变量来随意重现行为。
我认为我安装的旧版Git(很久以前)存在一个错误,它将引用的定位添加到路径环境变量中,而更新的更新从未改变过它。我怀疑NUnit测试运行器是否容忍引号,而XUnit测试运行器不是。
我希望我的经验有助于解决您的问题。
以防有人仍然遇到“0测试发现 - 路径中的无效字符”的相同问题。我正在经历它,但我能够解决它,但是,我花了两天时间才找到解决方案。解决方案非常简单,但当时表面尚不清楚。解决方案:( Windows - PC)
完成这些步骤后,这次应该进行测试。