【发布时间】:2016-10-11 14:36:05
【问题描述】:
我正在阅读《以测试为指导的发展面向对象的软件》一书。
但我使用的是 AssertJ 和 Mockito,而不是 Hamcrest 和 jMock。
我之前需要检查与JTable 的第 0 行关联的一个或多个表事件的发生。
// verify that one or more events in row 0 happen
verify(listener, atLeastOnce() ).tableChanged(refEq(new TableModelEvent(model, 0)));
(请注意,几天前,Mureinik here 向我介绍了 refEq)。
现在我需要检查一个TableModelEvent 是否出现在第0 行,属于TableModelEvent.UPDATE 类型。这本书有:
one( listener ).tableChanged( with( aChangeInRow( 0 )));
...aChangeInRow 似乎来自 jMock。
注意TableModelEvent 有一个有用的方法getType()。这是我想写的:
// verify that precisely one ***change*** event happens in row 0
// *** CAVEAT: ERRONEOUS CODE ***
verify( listener ).tableChanged(refEq(new TableModelEvent(model, 0))).getType().isEqualTo( TableModelEvent.UPDATE );
但这甚至不能编译...我应该写什么?
更一般地说,是否有一种 AssertJ/Mockito 技术可以提取作为参数传递的值(这里是 TableModelEvent)到经过验证的方法,以便对其进行任何您想要的测试?
【问题讨论】:
标签: tdd mockito hamcrest jmock assertj