デリゲートがFooException
をスローしないことをテストしたいが、それが何かをスローするかどうかは気にしない。したがって、Nothing
という制約は使用できません。特定の例外をスローしないデリゲートのNUnit制約
制約モデルはこのような何かを持っていない:
Assert.That(del, Throws.Not.InstanceOf<FooException>()); //can't use Not like this
は何とかその可能ですか?
デリゲートがFooException
をスローしないことをテストしたいが、それが何かをスローするかどうかは気にしない。したがって、Nothing
という制約は使用できません。特定の例外をスローしないデリゲートのNUnit制約
制約モデルはこのような何かを持っていない:
Assert.That(del, Throws.Not.InstanceOf<FooException>()); //can't use Not like this
は何とかその可能ですか?
これはちょっとawkwarですDそれ個人的に
Assert.That(Assert.Catch(del), Is.Null.Or.Not.TypeOf<FooException>());
を行う必要がありますが、私は2つのライン版
var ex = Assert.Catch(del);
Assert.That(ex, Is.Null.Or.Not.TypeOf<FooException>());
かさえ明確3-ライナーですべてです主張していないので、これは動作します
var ex = Assert.Catch(del);
if (ex != null)
Assert.That(ex, Is.Not.TypeOf<FooException>());
に好みます成功と同じ。
構文でこれをテストするための直接的な方法がないことは、開発者の意見が反映されています。
すべての異なるオプションをありがとう!ガード/チェック文をテストするときに、あなたが知らないかもしれない少なくとも1つのケースがあります。私は、データが悪い場合はそれが何かを知っているが、それ以外はそうではない(気にしないで、悪いデータに対して特定のやり方でそれに気をつけてください)。 – grokky
nunitはそれを箱から出してくれないようです。
しかし、あなたは、いくつかの回避策を持っている:ThrowsNothingConstraint
よう
del.ShouldNotThrow<FooException>();
はまた、あなたがあなた自身のcustom-constraintsを書くことができ、:
あなたは次のアサーションを行うことができますFluentAssertions
のような追加のアサーションの枠組み、 を使用することができますまたはカスタムメトリックを書くことができます
public void AssertException<T>(Action act) where T : Exception
{
try
{
act();
}
catch (T e)
{
Assert.Fail();
}
catch (Exception e)
{
Assert.Pass();
}
}
例外をキャッチして、それが 'FooException'のインスタンスではないことを確認しようとしましたか?何かがこれを疑う:Assert.IsNotInstanceOf(exc) ' –
@GeorgeAlexandriaうん、それは私がやっていることだが、それは乱雑だ。私はそれを行う方法で構築されていることを望んでいた。 – grokky