我正在尝试使用FEST摇摆测试套件来编写不同接口响应的测试。在单类情况下,它非常有效。然而,现在我有一种情况,我有使用GMockTestCase。我设置了所有的模拟方法调用与返回,然后创建我的"玩"外壳,但我的断言失败。如果我在没有mock类的情况下运行相同的测试,我的测试就通过了。有什么东西必须按顺序摆放吗?
下面是我的测试:
@Test
void testsShouldReturnRadioButtonSelectedFromClassGroupButtonGroupKeyPressed(){
def mockClassMap = getClassMap()
mockPG.getAvailibleClass().returns(mockClassMap)
panel.plyGen = mockPG
panel.raceValue = 1
panel.genderValue = 2
panel.gPane.mainM.setVisible(false)
panel.gPane.createPlayerStats.setVisible(true)
//panel.plyGen = new PlayerGenerater()
play{
festSetUp(panel.gPane.chooseClass)
panel.gPane.reRollDice.requestFocusInWindow()
// simulate key stroke to change panel view
robot.keyPress(VK_A)
robot.keyRelease(VK_A)
// simulate key stroke to select radio button option
robot.keyPress(VK_M)
robot.keyRelease(VK_M)
assertThat(panel.classValue, is(3))
}
}
只是为了回答我自己的问题,以方便那些可能有类似问题的人。答案是将测试限制为单个用户输入交互。上面我试图模拟两件事。从一个面板屏幕移动到另一个面板的交互以及第二个面板上的交互。将交互限制为仅测试用户交互的后半部分是允许FEST正确识别交互的。在这个例子中,通过测试的结果代码是:
def mockClassMap = getClassMap()
panel.plyGen = mockPG
mockPG.getAvailableClass().returns(mockClassMap)
panel.raceValue = 1
panel.genderValue = 2
panel.gPane.mainM.setVisible(false)
panel.gPane.chooseClass.setVisible(true)
//panel.plyGen = new PlayerGenerator()
play{
festSetUp(panel.gPane.chooseClass)
/*additional methods that need to be triggered in order to
*set up the panel for actual test
*/
panel.setClassGroup()
gPane.classGroupPanel.revalidate()
gPane.chooseClass.setVisible(true)
//simulate user interaction
robot.keyPress(VK_M)
robot.keyRelease(VK_M)
//assert results
assertThat gPane.selectClass.getSelection(), is(gPane.monk.getModel())
}
基本单元测试101将测试隔离到单个操作