【发布时间】:2010-11-07 13:24:03
【问题描述】:
所以基本上,我有一个抽象类,它有一个唯一的增量 ID - Primitive。当 Primitive(或更准确地说,Primitive 的继承者)被实例化时,ID 会递增 - 直到 ID 溢出的点 - 在这一点上,我向异常添加一条消息并重新抛出。
好的,一切都很好......但我正在尝试测试这个功能,我以前从未使用过模拟。我只需要制作足够的 Primitives 以使 ID 溢出并断言它在正确的时间抛出。
- 实例化20亿个对象来做这个是不合理的!但是我没有看到其他方法。
- 我不知道我是否正确使用了模拟? (我使用的是
Moq。)
这是我的测试 (xUnit):
[Fact(DisplayName = "Test Primitive count limit")]
public void TestPrimitiveCountLimit()
{
Assert.Throws(typeof(OverflowException), delegate()
{
for (; ; )
{
var mock = new Mock<Primitive>();
}
});
}
和:
public abstract class Primitive
{
internal int Id { get; private set; }
private static int? _previousId;
protected Primitive()
{
try
{
_previousId = Id = checked (++_previousId) ?? 0;
}
catch (OverflowException ex)
{
throw new OverflowException("Cannot instantiate more than (int.MaxValue) unique primitives.", ex);
}
}
}
我认为我做错了 - 那么我该如何正确测试呢?
【问题讨论】:
-
你为什么要捕获 OverflowException 并用不同的消息抛出相同的异常?您应该简单地忽略该条件并让框架处理它。异常不应被 try/catch 块用作“返回码”。
-
我认为当出现问题时它会更容易修复。也许评论会更合适。
标签: c# unit-testing .net-4.0 moq xunit