2016-04-07 5 views
7

現在、NUnit 2の代わりにNUnit 3を使用するようにいくつかのユニットテストを書き直しており、アサーションの一部を制約ベースのアサートに変更する必要があります。制約ベースのアサートでIsNotNullOrEmptyをアサートする可読性を向上させる

Assert.IsNullOrEmpty(result); 

私が変更したこと:私は次のように主張する必要がありIsNotNullOrEmptyを主張しかし

Assert.That(result, Is.Null.Or.Empty); 

、私は読みやすさと完全に満足していないよ:

Assert.That(result, Is.Not.Null.And.Not.Empty); 

マイ現在の提案は、次の静的クラスを作成することです:

public static class Text 
{ 
    public static EmptyConstraint IsNullOrEmpty => Is.Null.Or.Empty; 

    public static EmptyConstraint IsNotNullOrEmpty => Is.Not.Null.And.Not.Empty; 
} 

使用法:これは、カスタムの制約を導入を犠牲にして読みやすくしています

Assert.That(result, Text.IsNotNullOrEmpty); 

。同じアサーションを作成する標準的な方法はありますか、代わりにIs.Not.Null.And.Not.Emptyを使用し続ける必要がありますか?

+0

この質問に客観的に回答することができます。非主観的な言葉で質問を再現するために体を編集した。再開するための投票。 – dasblinkenlight

答えて

7

Is.Null.Or.Emptyのアサーションは、Testクラスなしで完全に細かい読み取りを行います。さらに、このアサーションが失敗すると、何が起こったのか正確に知ることができます。空でない有効なstringオブジェクトがあります。私はその否定の「ドモルガン化し」バージョンを参照

問題、すなわちIs.Not.Null.And.Not.Emptyは、それが長すぎる、そしてそれはほぼ同じくらいきれいIs.Null.Or.Emptyが行うように読んでいないということです。

しかし、むしろそれに別々の制約を作るよりも、私は、別にそれは2つの障害状態、すなわち、重複していないということであるように私はそれを行うだろうつまり

Assert.That(result, Is.Not.Null); 
Assert.That(result, Is.Not.Empty); 

理由をその部品を主張でしょうresultnullにすることもできますし、空にすることもできますが、同時に両方にすることはできません。単一の複合語アサーションはこれらの2つの状況を区別しないため、がnullであるか空であるかどうかを確認するデバッガになります。

別のアサーションは、非常に読みやすいままで何が起こるかを正確に伝えます。彼らはアサーションごとにあなたに1行追加します。私はこれが潜在的な失敗のより正確な情報を得るための妥当なコストだと思う。

関連する問題