つまり、基本的に、一意のインクリメンタルIDを持つ抽象クラスがあります- Primitive
。Primitive
(またはより正確にはの継承者)Primitive
がインスタンス化されると、IDがインクリメントされます(IDがオーバーフローするポイントまで)。その時点で、例外にメッセージを追加して再スローします。
OK、それはすべて正常に機能します...しかし、私はこの機能をテストしようとしており、これまでモックを使用したことはありません。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);
}
}
}
私はそれを間違っていると思います-それで、これを正しくテストするにはどうすればよいですか?