在单元测试中比较对象的正确方法

Mik*_*uto 5 java grails junit unit-testing

我正在为我的grails应用程序编写单元测试,并且我意识到我并不知道确定对象是否是正确对象的正确方法.

例如,鉴于此测试:

void testExampleTest() {
    mockSession.person = new Person(firstName:'John', lastName:'Doe', middleInitial:'E')
    def model = controller.testMethod()
    ...assertions...
}
Run Code Online (Sandbox Code Playgroud)

def testMethod = {
    Person currPerson = session.getAttribute("person")
    render(view:'view',model:[person:currPerson]
}
Run Code Online (Sandbox Code Playgroud)

我应该如何确保我添加到会话中的人物对象在模型中正确传递?是否足够使用

assertEquals( person,model['person'] )
Run Code Online (Sandbox Code Playgroud)

或者因为我自己将对象注入会话中使用它更有意义

assertEquals( person.firstName, model['person'].firstName )
assertEquals( person.lastName, model['person'].lastName )
assertequals( person.middleName, model['person'].middleName )
Run Code Online (Sandbox Code Playgroud)

在我看来,只要对象具有正确定义的equals方法,第一种方法就足够了,但我只是想看看传统的方法是什么.

谢谢

Vic*_*nko 4

逐个属性的比较需要在每个测试中重复 - 所以这是一个很好的旧代码重复,XUnitPatterns 中描述的测试味道。最好有一个合适的equals()

当然,您可以添加实用方法personEquals(),甚至可以Person.equals()在运行时重写。对于模拟类,您可能必须这样做。assertEquals()我个人坚持使用较短的代码,尽可能只使用一个。