【发布时间】:2016-03-22 17:41:11
【问题描述】:
编辑: 有一个类似的问题here,但解决方案仅提供解决方法,并没有提供有关问题原因或解决方法的见解。这个问题可能仍然是重复的。
编辑 2: 事实证明,此问题仅在调试期间发生,尽管之前并未发生。将(TCheck)null 替换为null as TCheck 后,测试在运行时通过,但在调试时抛出异常。
原帖: 我在单元测试中有一个方法,看起来像这样
internal void EqualityAssert<TCheck, TEquatable>(TEquatable item, ... )
where TCheck : class, IEquatable<TEquatable>, TEquatable
{
// Various equality assertions that are passing
// ...
// A == null
Assert.Throws<NullReferenceException>(
() => ((IEquatable<TEquatable>)item).Equals((TCheck)null));
}
这个方法被各种单元测试调用,并且这些测试中的每一个都失败了,因为“遇到了未处理的 NullReferenceException”,这正是预期的地方。
Assert.Throws 之前对我来说可以正常工作,但我无法弄清楚是什么改变了它。
【问题讨论】:
-
可能是因为
(TCheck)null。尝试将其更改为null as TCheck。我刚刚试了一下,看起来不太可能,但很高兴看看你的场景会发生什么。 -
你试过调试你的测试吗?
-
@StephenRoss 这并没有解决问题,我仍然在 Equals 实现中遇到异常,这正是预期的。
-
@rclocher3 也许我误解了你的问题..是的,我正在逐步完成测试并检查值,一切都符合预期。您问的是更具体的调试方法吗?
-
不,我只是记得有一次我的测试失败了,因为我认为这是意料之中的未捕获异常,但事实证明在代码的其他地方抛出了异常。祝你好运。
标签: c# unit-testing nullreferenceexception assert xunit.net