我的问题是,在某个地方,不知何故,只有偶尔,Environment.CurrentDirectory
在我的测试套件运行时被设置为C:\Windows\System32
。一些测试取决于当前目录,因此它们会失败。
我在我的项目中完成了一个find-all并确认我的代码都没有设置该属性。我使用了很多第三方库,所以我怀疑其中一个正在修改当前目录。
我已经专门针对当前目录更改为system32进行了一些搜索,但是我已经空了。是否有一些常见的原因可能会发生这种情况?
另一种同样空洞的方法是:我如何追查罪魁祸首?据我所知,当值发生变化时,我不能让Visual Studio中断。因为它是一个环境变量而且在.NET库中,我无法在setter中设置断点。
我想过使用procmon或者其他东西,希望记录当前目录的变化,但是当它发生时它不会暂停执行,所以我仍然不知道它发生在哪里。
我只是不知道如何调试它。有任何想法吗?或者是我唯一可以将Environment.CurrentDirectory
保存到全局只读字段并且仅在我的代码中引用它,允许它是什么来修改当前目录而不受惩罚?
答案 0 :(得分:1)
首先,这是一种非常糟糕的方法,可以依靠外部资源进行单元测试。当其他人测试你的代码时,单元测试取决于当前目录可能会失败。
为什么不使用Microsoft Fakes返回目录的特定值?
为了创建假,在单元测试的引用中,右键单击引用并单击"添加假装配"。
例如,如果您的单元测试依赖于当前日期,则假冒可以使用以下代码生成另一个日期/时间:
ShimDateTime.NowGet = ()=> new DateTime(2012, 12, 21);
我建议阅读这篇文章。它具有很高的价值:http://www.dotnetcurry.com/showarticle.aspx?ID=963