NUnit锁定DLL

15

我一直在使用nunit和Visual Studio 2010在Windows 7 64位电脑上。我能够打开nunit界面并运行我的单元测试。但是,如果我更改其中一个单元测试并尝试重新构建,则会出现文件锁定错误,如下所示 -

错误1:无法将文件“obj \ Debug \ myProject.Tests.dll”复制到“bin \ Debug \ myProject.Tests.dll”。因为其他进程正在使用该文件“bin \ Debug \ myProject.Tests.dll”。myProject.Tests

我使用了Process Explorer来验证是nunit-agent.exe锁定了dll。

我注意到通过工具>测试程序集,nunit.exe在clr版本Net 2.0下运行,而nunit-agent.exe在clr版本Net 4.0下运行。这可能与问题有关吗?如果是的话,我该怎么解决?如果不是,有人有什么其他想法吗?

感谢任何想法。


4个回答

18

我认为这与我的测试项目的位置有关。最初,我将nunit测试项目放在与我的dll文件不同的目录中。我原本想把所有的测试项目集中在一个地方。

然后,我将我的测试项目移动到了与我的测试dll在同一个位置下的Visual Studio项目中。之后,它似乎可以正常工作了。

我认为这与影子复制有关。我在谷歌上的nunit组中读到过,.net框架只会在应用程序基础目录或其子目录中进行程序集的影子复制。

这让我尝试在我的应用程序基础目录中创建nunit测试项目,那样看起来就可以正常工作了。

希望这讲得清楚。

谢谢


啊,你简直是个天才!那真是解决了我的问题,它困扰我好几天了。 - Shagglez

8
我也遇到了同样的问题,但是czuroski的答案对我没有用(尽管我认为我们实际上谈论的是同一件事)。
对我有用的是确保在NUnit中设置Project PathProject Base指向Project下相同的根应用程序文件夹。我将现有的Nunit项目重新保存到与我的VS sln文件相同的目录中。

非常感谢。我不想将NUnit项目放入项目目录中,以避免破坏版本控制存储库。将“项目基础”更新为指向解决方案目录有所帮助! - Kos

2

另一个需要检查的是确保在 Nunit -> 工具 -> 设置 -> TestLoader -> Advanced -> 启用影像拷贝(Shadow Copy)。


0

请尝试以下操作,选择“工具”>“设置”>“测试加载程序”>“程序集隔离”>“默认进程模型”>“每个程序集在单独的进程中运行测试”。


1
我建议您在答案中添加一些解释性文本,否则您的答案可能会被删除为“低质量”(即使它可能是正确的答案)! - Adrian Mole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接