2010-09-20 3 views
0

Так что я здесь, играя с PEX, кажется отличной идеей.PEX: Как бы вы протестировали метод равенства в pex?

Однако у меня есть несколько проблем, например, у меня нет возможности протестировать метод equals с использованием тестов модульных единиц.

Возможно, нет способа, возможно, его техника, которую я еще не понял.

У кого-то должна быть достойная идея.

Если бы я делал это в moq, например, я бы удостоверился, что все свойства на обоих объектах прочитаны и сами выполняют сравнения для их проверки. однако я не вижу, как использовать этот подход с параметризованными тестами.

проблема заключается в том, что мне нужно проверить, что вызовы метода сделаны, а свойства заданы/прочитаны в моей бизнес-логике. Я не знаю, как это сделать в PEX, и там действительно нет большого количества документации.

ответ

1

Есть некоторые основные свойства, которые можно проверить, что имеют отношение к математическому определению равенства:

  • не авария: а == б никогда не бросает исключение
  • симметричным: (а == Ь) == (б == а)
  • рефлексивный: (а == а) == истинная
  • транзитивность: (а == б) & & (б == с) ==> а == с
  • с учетом Func f, a == b ==> f (a) == f (b)

Все это приятно, но определенно не гарантирует, что равенство работает. но в какой-то момент вы укажете в качестве утверждений, что означает для вас равенство. Например, что значения свойства P должны быть равными и т. Д. В конечном счете, вы получите вторую спецификацию равенства в качестве тестов.

Вещи становятся более interresting, когда вы investiate отношения с GetHashCode:

  • a.GetHashCode() + b.GetHashCode() ==> а = Ь
  • тождественной:! A.GetHashCode () == a.GetHashCode()
+0

Интересный ответ. Я неправильно сформулировал этот вопрос, однако вам удалось дать очень полезный ответ, я не рассматривал тестирование этих свойств. GetHashCode также входит в мой список;) –

+0

v поздний ответ, но на самом деле, вероятно, правильный подход к отражению –

 Смежные вопросы

  • Нет связанных вопросов^_^