【问题标题】:Visual Studio 2008 Unit test does not pick up code changes unless I build the entire solution除非我构建整个解决方案,否则 Visual Studio 2008 单元测试不会获取代码更改
【发布时间】:2010-05-05 21:18:37
【问题描述】:

这是场景:

  1. 更改我的代码:
  2. 更改我对该代码的单元测试
  3. 将光标置于单元测试类/方法中,调用 VS2008 的“在当前上下文中运行测试”命令
  4. visual studio“输出”窗口指示代码 dll 和测试 dll 均成功构建(按此顺序)

但问题是,单元测试没有使用它刚刚构建的最新版本的 dll。相反,它使用之前构建的 dll(其中没有更新的代码),因此测试失败。

当添加一个新方法时,这会产生MethodNotImplementedException,而当添加一个类时,它会产生TypeLoadException,这都是因为单元测试认为新代码在那里,但它不是!如果我只是更新现有方法,那么测试会因为结果不正确而失败。

我可以通过这样做“解决”这个问题

  1. 更改我的代码:
  2. 更改我对该代码的单元测试
  3. 调用 VS2008 的“构建解决方案”命令
  4. 将光标置于单元测试类/方法中,调用 VS2008 的“在当前上下文中运行测试”命令

问题是做一个完整的构建解决方案(即使没有任何改变)需要超过 30 秒,因为我有大约 50 个 C# 项目,而 VS2008 还不够聪明,无法意识到只需要查看其中的 2 个在。只需要更改 1 行代码并重新运行单元测试就必须等待 30 秒,这太糟糕了。

我能做些什么来解决这个问题吗?我的代码都不是在 GAC 中或类似的有趣的东西,它只是普通的旧 dll(在 win7/64 位机器上针对 .NET 3.5SP1 构建)

请帮忙!

【问题讨论】:

  • 您已经有足够长的时间知道最好不要在标签中使用vs2008。啧啧。

标签: visual-studio-2008 unit-testing mstest


【解决方案1】:

经过一番挖掘,我解决了这个问题:

  1. 显示测试 dll 上的引用列表
  2. 从列表中删除对代码 dll 的引用
  3. 重新添加。

然后我对 .csproj 进行了 diff 以查看发生了什么变化,如下所示

破旧的

<ProjectReference Include="..\Base\Base.csproj">
  <Project>{1C61F557-24C5-4B4A-90A8-08D0DCEE15A1}</Project>
  <Name>Base</Name>
  <Private>False</Private>
</ProjectReference>

新的和好的

<ProjectReference Include="..\Base\Base.csproj">
  <Project>{1C61F557-24C5-4B4A-90A8-08D0DCEE15A1}</Project>
  <Name>Base</Name>
</ProjectReference>

&lt;Private&gt;False&lt;/Private&gt; 位显然意味着“复制本地”,所以这解释了它。自我注意:请记住将 Copy Local 设置为 true 以进行单元测试!

【讨论】:

  • @Orion - 复制本地集在哪里?
猜你喜欢
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多