次のコードがあるとします。
public abstract class TemplateBase {
public void TemplateMethod() {
Operation(); }
protected abstract void Operation(); }
public sealed class Implementation : TemplateBase {
bool _alwaysTrue;
public Implementation(bool alwaysTrue) {
_alwaysTrue = alwaysTrue; }
[ContractInvariantMethod] void ObjectInvariant() {
Contract.Invariant(_alwaysTrue == true); }
protected override void Operation() {
_alwaysTrue = false; } }
[TestClass] public sealed class InvariantTest {
[TestMethod] public void Constructor() {
new Implementation(false); }
[TestMethod] public void Method() {
new Implementation(true).TemplateMethod(); } }
InvariantTest.Constructor は常に「Invariant failed」例外で失敗します。
不変条件に基づいて InvariantTest.Method を失敗させるにはどうすればよいですか?
実行時チェックを完全に設定し、「呼び出しサイトにはチェックが必要」を有効にしましたが、それでも役に立ちません。