我正在学习如何使用NUnit。我的主要项目在它的解决方案中,并在同一个解决方案中创建了一个单独的项目,它将持有我自己的命名空间的单元测试。从该项目中,我添加了对主项目的引用并添加了
using MainProjectNamespace;
到它的顶部。
当我去NUnit时,我所做的任何测试都没有参考主要的项目工作。这些是我为了习惯NUnit而设置的测试,几乎没用。当NUnit运行实际测试时,测试会抛出此异常:
TestLibrary.Test.TestMainProject: System.IO.FileNotFoundException: 无法加载文件或程序集 'WpfApplication2,Version = 1.0.0.0, Culture = neutral,PublicKeyToken = null' 或其中一个依赖项。该 系统找不到指定的文件。
为什么我会收到此异常?
编辑:
现在,当我尝试将程序集加载到NUnit中时,它甚至不会加载(因此我甚至无法运行测试)
这是来自sup的异常,以及堆栈跟踪:
System.IO.DirectoryNotFoundException:找不到路径的一部分'LONG PATH HERE I WANT TO TYPE'
System.IO.DirectoryNotFoundException...
Server stack trace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.SetCurrentDirectory(String path)
at NUnit.Core.DirectorySwapper..ctor(String directoryName)
at NUnit.Core.Builders.TestAssemblyBuilder.Load(String path)
at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, Boolean autoSuites)
at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, String testName, Boolean autoSuites)
at NUnit.Core.TestSuiteBuilder.Build(TestPackage package)
at NUnit.Core.SimpleTestRunner.Load(TestPackage package)
at NUnit.Core.ProxyTestRunner.Load(TestPackage package)
at NUnit.Core.ProxyTestRunner.Load(TestPackage package)
at NUnit.Core.RemoteTestRunner.Load(TestPackage package)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at NUnit.Core.TestRunner.Load(TestPackage package)
at NUnit.Util.TestDomain.Load(TestPackage package)
at NUnit.Util.TestLoader.LoadTest(String testName)
EDIT2: 上面的路径显然是在我的硬盘中
EDIT3: 我刚刚在NUnit上从Debug切换到Release,并从TestingLibrary的release文件夹中加载了dll ......然后加载了! 3个特定于命名空间的测试中有1个起作用。到了某个地方,我是。
EDIT4: Welllllllll ......我现在可以实际运行测试了,但我回到原来的错误。 IT没有找到主项目的程序集
答案 0 :(得分:5)
编译器删除所有未使用的引用,并且不会不必要地部署dll。 using
(单独)不算作用。通过“复制到输出目录”设置标记要部署的dll,或者添加一些真正使用在dll中声明的类型的代码。
答案 1 :(得分:1)
您是否重命名了源项目中输出程序集OR名称空间的名称?
您的源文件看起来像是“WPFApplication1”&我猜你可能已经将输出类型从dll更改为exe?
答案 2 :(得分:1)
我有同样的问题,RKitsons的回答帮助了我。
基本上我将我的项目所依赖的所有dll以及nunit.framework.dll复制到同一目录中... obj / debug /这是一种方法。
优雅的方法是将Visual Studio中的项目配置更改为Build选项卡下的release模式,如果项目设置正确,则应将所有相关dll复制到适当的“out”或“release”目录中。 / p>
答案 3 :(得分:0)
看起来您在应用中引用的程序集之一依赖于不在bin文件夹中的另一个程序集。