2014-10-17 52 views
1

我有一个函数addFromXML(),它加载一个XML文件,解析它的DLL路径,并加载这些DLL。这些DLL是我在其他项目删除C中单元测试中使用的临时DLL

写为了测试它基于CLR组件(未本地代码),我有多个单元测试功能的是,在制备过程中,复制的一例的XML文件,并从一个存根DLL文件我的资源使用Path.getTempPath()临时文件,然后运行测试。

通常情况下,我可以在finally块中完成测试后删除文件。但是,DLLs有问题,因为一旦加载到当前的AppDomain中,DLL就不能被删除,所以我将不得不在每次测试运行完成后手动删除这些DLL。如果我不这样做,那么每次我进行单元测试时,我的临时文件夹的大小会越来越大,这正是我想要减少的。如果他们进行单元测试,我的开发团队中的其他人也会面临同样的问题,我不想这样做。

发布DLL的唯一方法是将其加载到单独的AppDomain中。但是,我不想为我的程序这样做,因为它过于复杂并且可能会影响性能。卸载DLL的能力也不是实际程序本身的要求。

也许我的方法将DLL复制到临时文件是错误的?有没有更好的方法来测试涉及DLL的加载函数?

回答

1

您可以在测试运行之前删除以前的dll,而不是在测试运行之前进行清理。这样,以前的dll将不会被加载到应用程序域中,并且可以安全地删除它们。你仍然会有1次运行价值的dll,但这不应该太大。

+0

我想到了这一点,但因为我使用随机的路径名,以避免冲突,这可能是不实际的......除非我选择使用硬编码的路径名的临时文件,这可能会导致冲突 – 9a3eedi 2014-10-20 06:49:47

+0

你能做些什么在测试夹具推倒你可以输出你像CompletedTestRuns.txt一个文件中使用的随机文件(S)的名称,那么当您启动读取这个文件的内容,并删除所有它表明不使用的文件任何更多。那么你可以从这个文件中移除指针并开始测试。 – 2014-10-20 07:54:33

2

你在写什么不是严格的单元测试。一个理想的单元测试将是强大的,因此不应该触及文件系统。

如果你有兴趣的最大化单元测试覆盖率,一个很好的办法可能是包文件复制.NET调用并测试它被调用正确的DLL路径。这将允许您调用资产副本,而不会创建脆弱的单元测试,以确保您的团队的其他成员都必须了解和设置。

您还可以通过在单元测试项目中包含示例DLL并在单元测试期间加载DLL来加载DLL。这不需要在文件系统上移动任何东西,也不会受到您的限制。

旨在使您的单元测试只测试您的代码,而不是.NET框架,您的硬盘或您的网络。你的团队和那些追随你的人会为此感谢你。我希望这是有帮助的。

+0

我明白,一个单元测试应该是强大的,它还挺难看,我使用的临时文件,但我肯定我的测试代码,而不是.NET框架或硬盘或文件系统。我的意思是.NET程序集是他们是我写的基于CLR的程序集,而不是.NET框架(我编辑了我的问题来澄清)。我之前在我的单元测试项目中包含了一个DLL,并试图让单元测试使用它,但是想要以便携和正确的方式轻松地从单元测试中引用文件是很困难的。也许我应该再试一次。 – 9a3eedi 2014-10-20 06:53:50