2010-01-26 52 views
1

在一个C#类库和一组测试中。一切都很顺利,直到我添加了一组新的测试 - 它们在我的机器上正确运行,但在TFS构建服务器上失败。构建日志中的堆栈跟踪毫无意义 - 一个类的构造函数似乎映射到其中一个方法。单元测试的堆栈跟踪怎么能不符合实际的源?

如果我的类看起来有点像这样:

1. public class ClassToBeTested 
2. { 
3. 
4.  /// <summary> 
5.  /// Default constructor. 
6.  /// </summary> 
7.  public ClassToBeTested() 
8.  { 
9. 
10.  } 
11. 
12.  /// <summary> 
13.  /// Default constructor. 
14.  /// </summary> 
15.  public MethodToTest() 
16.  { 
17.   /* do stuff that throws exception */ 
18.  } 
19. 
20. } 

而且在我的单元测试类我有这样的:

1. [TestMethod()] 
2. public void UpdateTest() 
3. { 
4.  ClassToBeTested Target = new ClassToBeTested(); 
5.  ClassToBeTested.MethodToTest(); 
6. } 

然后我的堆栈跟踪表明这一点:

试验方法unittestclass.UpdateTest抛出异常/不管/
ClassToBeTested.MethodToTest():第17行
unittestclass.UpdateTest():4号线

这怎么可能?

+0

确定 - 这似乎是某种优化的bug /问题(只发生在发布版本中,但是然后,我的测试不会在构建服务器上运行调试版)+1,并且可以为任何可以提供MS引用的人接受答案。 – 2010-01-27 02:55:42

回答

1

我想抛出一个异常,可能有一些用它做的方法中的代码。特别是如果东西在里面有一个静态构造函数: 或许这可以提供一些线索:

http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-initialization-changes-in-net-4-0.aspx

但对于更多的帮助...也许是缺码方法的详细信息和/或异常类型。

还要检查你的调试机器上生成配置相同的生成服务器..或尝试测试发布/发布配置

+0

+1提醒我阅读约翰的博客和有趣的可能性,即使这不是在这里发生的事情。 – 2010-01-27 02:33:51