【发布时间】:2010-01-21 20:03:41
【问题描述】:
当我调用泛型基类型的方法时,我的单元测试做了一些非常奇怪的事情。我已经尝试过 NUnit 和 MSTest,结果相同。这就是代码的组织方式:
public class MyStub {}
public class EnumerableGenerator
{
public bool GotMyStubs;
public IEnumerable<MyStub> GetMyStubs()
{
GotMyStubs = true;
yield return new MyStub();
}
}
public class ConsoleRunner
{
public void Main(string args[])
{
EnumerableGenerator gen = new EnumerableGenerator();
gen.GotMyStubs = false;
var myStubs = gen.GetMyStubs();
if (!gen.GotMyStubs)
return 1;
}
}
测试显然失败了。奇怪的是,当我进行集成测试时,代码运行良好。它只在单元测试中中断。我根本无法进入 GetMyStubs。方法中的断点也不会中断。我已经为 CLR 抛出的所有异常打开了中断,这也没有产生任何结果。
我检查了 GetMyStubs 返回的类型,该类型的全名如下所示:
[MyNamespace.EnumerableGenerator2+<GetMyStubs>d__8[[MyNamespace.MyStub, MyNamespace, Version=7.1.0.0, Culture=neutral, PublicKeyToken=null]]
现在,当我查看代码覆盖率时(通过 MSTest),我注意到有一个 EnumerableGenerator.d__8 条目。
有人见过这样的吗?我完全迷路了......
【问题讨论】:
-
简化代码示例以说明实际问题并更改名称以更紧密地匹配。
-
对 - 是的,这绝对解释了它失败的原因。
-
谢谢大家。真的帮了很多忙。
标签: c# unit-testing generics nunit mstest