サーチ…


論理をチェックするアサーションは常に真でなければなりません

アサーションは、入力パラメータのテストを実行するのではなく、プログラムフローがcorectであることを確認するために使用されます。つまり、特定の時点でコードに関する特定の仮定を行うことができます。言い換えれば、 Debug.Assert行われたテストは、 常にテストされた値がtrueと仮定しなければなりませ

Debug.AssertはDEBUGビルドでのみ実行されます。 RELEASEビルドから除外されます。これは、単体テストに加えて、コード契約や入力検証方法の置き換えとしてではなく、デバッグツールと見なす必要があります。

例えば、これは良いアサーションです:

var systemData = RetrieveSystemConfiguration();
Debug.Assert(systemData != null);

ここでは、RetrieveSystemConfiguration()が有効な値を返し、決してnullを返さないと仮定できるので、assertは良い選択です。

もう一つの良い例があります:

UserData user = RetrieveUserData();
Debug.Assert(user != null);
Debug.Assert(user.Age > 0);
int year = DateTime.Today.Year - user.Age;

まず、RetrieveUserData()が有効な値を返すと仮定します。次に、Ageプロパティを使用する前に、ユーザーの年齢が厳密に正当であるという仮定(常に真であるべき)を検証します。

これはassertの悪い例です:

string input = Console.ReadLine();
int age = Convert.ToInt32(input);
Debug.Assert(age > 16);
Console.WriteLine("Great, you are over 16");

アサーションは入力検証のためのものではありません。なぜなら、このアサーションが常に真であると仮定するのは間違っているからです。そのためには、入力検証メソッドを使用する必要があります。上記の場合、入力値が最初の数字であることも確認する必要があります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow