NUnit首先在Resharper测试运行器中使用Entity Framework测试非常慢

时间:2011-08-23 11:36:27

标签: visual-studio entity-framework entity-framework-4 nunit resharper

使用Entity Framework 4.1时,第一个NUnit测试的缓慢是否有任何解决方案?

我发现第一次测试大约需要10秒钟,其余测试时间为0.01秒(根据Resharper Show Time选项)

如果我使用NUnit GUI运行测试,那么第一次测试需要10秒,但如果我重新运行整套测试,则运行时间不到0.5秒... 直到我重新编译解决方案

我还在IIS中托管了一个WCF服务的NUnit测试,它调用EF,第一个测试在大约3秒内完成。然后,如果我重新运行测试,它会降低到1秒,正如预期的那样,重新编译时第一次会回到3秒。

但最初的NUnit测试是针对具有调用EF的方法的类库,它总是在10秒左右,即。没有减少时间

好的,我知道IIS正在做“某事” [what?] ,但在这两种情况下我都在使用NUnit来进行调用...为什么第一次使用10秒以上呼叫,另一个是3秒,然后是后续呼叫的1秒??

为了让我感到困惑,我编写了一个简单的控制台应用程序,该应用程序调用正在测试的类中的一个EF使用方法,并且它设法在1秒内完成。

UPDATE ...重写的相同测试MSTest测试在大约3.5秒内完成第一次测试,这与NUnit GUI运行器中的第一次测试运行相当,所以问题似乎成为Visual Studio中NUnit的Resharper测试运行器

更新2 ...是的,问题确实似乎是Resharper测试运行器。 TestDriven.NET和Visual Nunit 2010都更快。

更新3 ...现在已将JetBrains作为问题记录

2 个答案:

答案 0 :(得分:2)

这是常见的行为,因为第一次测试必须编译“EF视图” - 这是在您第一次使用模型中映射的任何内容时发生的。然后缓存并重用相同的编译视图。可以避免,但需要您手动生成视图代码(by using EdmGen.exe)将该代码添加到项目中并与解决方案一起编译。每次在EDMX中更改任何内容时都必须执行此操作,除非您将其作为项目中的某些预构建操作(这将反过来减慢构建速度)。

答案 1 :(得分:1)

各种跑步者之间的差异可能是由于他们正在使用的平台(x64与x86)。在x64模式下启动EF要慢得多。