【发布时间】:2011-03-11 04:54:15
【问题描述】:
我有一个单元测试 (nUnit)。如果方法通过单元测试运行,调用堆栈中的许多层都会失败。
理想情况下,您会使用模拟之类的东西来设置此方法所依赖的对象,但这是第 3 方代码,如果没有大量工作,我无法做到这一点。
我不想设置特定于 nUnit 的方法 - 这里的级别太多,而且它是一种糟糕的单元测试方式。
相反,我想做的是在调用堆栈的深处添加类似这样的内容
#IF DEBUG // Unit tests only included in debug build
if (IsRunningInUnitTest)
{
// Do some setup to avoid error
}
#endif
那么关于如何编写 IsRunningInUnitTest 有什么想法吗?
附:我完全意识到这不是很好的设计,但我认为它比其他选择更好。
【问题讨论】:
-
您不应在单元测试中直接或间接测试第三方代码。您应该将您的测试方法与第三方实现隔离开来。
-
是的 - 我意识到 - 在一个想法世界中,但有时我们必须对事情有点务实,不是吗?
-
回到克雷格的评论 - 不确定那是真的。如果我的方法依赖于以某种方式表现的 3rd 方库,那么这不应该成为测试的一部分吗?如果第 3 方应用程序发生更改,我希望我的测试失败。如果您使用模拟您的测试是针对您认为 3rd 方应用程序的工作方式,而不是它的实际工作方式。
-
Ryan,您可以测试有关第三方行为的假设,但这是一个单独的测试。您需要单独测试自己的代码。
-
我确实明白你的意思,但除了一个微不足道的例子之外,你会谈论大量(大量)的工作,并且没有什么可以确保你在测试中检查的假设是与您在实际方法中的假设相同。嗯 - 我想为一篇博文进行辩论,当我把我的想法集中在一起时,我会给你发一封电子邮件。
标签: c# reflection nunit