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()
Другие вопросы по тегам