PEX: Как бы вы протестировали метод равенства в pex?
Так что я здесь играю с PEX, это кажется отличной идеей.
Однако у меня есть несколько проблем, например, у меня нет возможности проверить метод equals с помощью модульных тестов параметров.
Может быть, нет никакого способа, может быть, это техника, которую я еще не понял.
У кого-то должна быть приличная идея.
Если бы я делал это, например, в moq, я бы позаботился о том, чтобы все свойства обоих объектов были прочитаны, и сам проверил их сравнение. однако я не вижу, как использовать этот подход с параметризованными тестами.
проблема в том, что мне нужно убедиться, что вызовы методов сделаны и свойства установлены / прочитаны в моей бизнес-логике. Я понятия не имею, как это сделать в PEX, и нет большого количества документации там.
1 ответ
Есть несколько основных свойств, которые вы можете проверить, которые связаны с математическим определением равенства:
- не вылетает: a == b никогда не выдает исключение
- симметричный: (a == b) == (b == a)
- рефлексивный: (a == a) == верно
- транзитивность: (a == b) && (b == c) ==> a == c
- заданный Func f, a == b ==> f(a) == f(b)
Все это хорошо, но определенно не гарантирует вам, что равенство работает. но в какой-то момент вы должны будете указать в качестве утверждений, что для вас означает равенство. Например, значения свойства P должны быть равны и т. Д. В конечном итоге вы получите вторую проверку равенства в качестве тестов.
Все становится интереснее, когда вы исследуете отношения с GetHashCode:
- a.GetHashCode ()! + b.GetHashCode () ==> a! = b
- идемпотент: a.GetHashCode() == a.GetHashCode()