使用Shouldly语句的单元测试失败

时间:2017-04-18 15:22:22

标签: c# unit-testing shouldly

有些日子,在我的本地计算机上运行的Visual Studio中的所有C#单元测试在到达第一个Shouldly语句时都会在TypeInitializationException之后引发:

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上存在类似的问题,但我的PATH环境是正确的。

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

即使是最简单的测试

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

在其他机器上,我无法重现相同测试的问题。

1 个答案:

答案 0 :(得分:0)

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

应该从PATH变量中检索所有路径并尝试&#34;猜测&#34;一个预定义的diff工具的路径。

当其中一个路径无效时,会引发此异常。目前已提出解决方案。见https://github.com/shouldly/shouldly/pull/423