Как сбросить список _version, чтобы предотвратить дублирование состояний в Spec Explorer

Я сделал проект Spec Explorer, который имеет список в качестве системной переменной. Почти в каждом правиле этот список адаптирован для получения правильных результатов. Но когда я исследую свой проект, я получаю двойные состояния. Если я сравню эти состояния, единственное отличие, которое я найду, это:

_version: 25 System.Int32
_version: 23 System.Int32

После поиска в Google, почему это происходит, я обнаружил, что при каждом изменении строки изменяется версия. Таким образом, несмотря на то, что версии 23 и 25 содержат одну и ту же строку, номер версии заставляет Spec Explorer думать, что они разные, поэтому он создает 2 состояния. Есть ли способ исправить это? Как сбросить строку или, возможно, есть способ заставить Spec Explorer принять это.

1 ответ

Решение

Вот идея возможной основной причины:

Объекты расширенного состояния, такие как Set, Sequence или Map, являются неизменными. Это означает, что если вы хотите добавить элемент, метод "Добавить" возвращает новый объект с измененным содержимым. Важно то, что этот возвращаемый объект все еще обнаруживается как тот же (но измененный контент) экземпляром Spec Explorer. Поэтому вы всегда должны использовать этот возвращаемый объект. Вы можете сделать это, назначив измененный объект обратно статической переменной состояния вашей модели программы:

_version = _version.Add(15);

Если вместо этого в вашей программе при каждом вызове вашего метода правил создается совершенно новый объект с "новым"-оператором, и этот новый объект копируется в переменную статического состояния вашей программной модели, вы всегда получите новый экземпляр и спецификацию. Explorer обнаружит их как разные экземпляры, даже если их содержимое одинаково.

_newversion = new Set<int>();  
...  
_version = _newversion;

Надеюсь, это поможет в вашем случае...

Другие вопросы по тегам