2017-04-18 170 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