2017-04-18 134 views
0

由于一些日子在Visual Studio中的所有我的C#单元测试我的本地机器上运行正在筹集以下TypeInitializationException到达第一Shouldly语句时:与内部异常与Shouldly声明单元测试失败

The type initializer for 'Shouldly.ShouldlyConfiguration' threw an exception 

Illegal characters in path 

及堆栈跟踪:

at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) 
at System.IO.Path.Combine(String path1, String path2) 
at Shouldly.Configuration.DiffTool.<>c__DisplayClass10_0.<GetFullPath>b__2(String path) 
at System.Linq.Enumerable.<>c__DisplayClass7_0`3.<CombineSelectors>b__0(TSource x) 
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() 
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate) 
at Shouldly.Configuration.DiffTool.GetFullPath(String fileName) 
at Shouldly.Configuration.DiffTool.Discover(String path) 
at Shouldly.Configuration.DiffTool..ctor(String name, String path, ArgumentGenerator argGenerator) 
at Shouldly.Configuration.KnownDiffTools..ctor() 
at Shouldly.Configuration.KnownDiffTools..cctor() 

有一个类似的问题在https://github.com/shouldly/shouldly/issues/422但我的路径环境是正确的。

对于任何独立于路径的单元测试项目,我都会得到相同的错误。

即使作为

[TestClass] 
    public class UnitTest2 
    { 
    [TestMethod] 
    public void TestMethod1() 
    { 
     int i = 1; 
     i.ShouldBe(1); 
    } 
    } 

最简单的测试在其它机器上,我不能重现该问题对于相同的测试。

+0

重新安装nuget包。最近在侵害机器上发生了什么变化。像操作系统更新? – Nkosi

+0

@Nkosi我试过了。我正在使用最新版本。没有改变操作系统的东西... – StefanG

回答

0

基于该堆栈跟踪,diff工具的路径不是有效路径。

应该从PATH变量中检索所有路径,并尝试“猜测”到其中一个预定义的差异工具的路径。

当其中一个路径无效时,会引发此异常。目前解决方案已经实施。请参阅https://github.com/shouldly/shouldly/pull/423

+0

我认为路径应该_uses_搜索,是无效的。但是,它需要什么参数?应该在我的机器上的路径是有效的。请参阅https://github.com/shouldly/shouldly/blob/master/src/Shouldly/Configuration/DiffTool.cs – StefanG