In addition to the SLaks answer, I would add that what you want to do is logically inconsistent. The statement should be used to document the condition under which it cannot be false. If a false condition arises, you know that you have a mistake; the purpose of the statement is (1) as a kind of commentary that describes to the reader what should be true at that point in the code, and (2) a debugging aid that tells you when you have an error.
Since the correct statements in the correct code never work, there is no way to test confident shelling. The premise of the test is that it creates a possible configuration for your software and verifies that it is correct; but the correct code with the correct statements never has a configuration in which assert fires.
You seem to be using Assert to not document something that you know is true, but rather what you hope is true or usually true. Do not use for this statement. If there are any program entries that cause a violation of the statement, you must either delete this statement or throw an exception when you receive invalid data so that this statement never sees. Statements are intended to document what should be true, not what is true most of the time.
See also this related question:
Debug.Assert vs Exception Throwing
source share