【发布时间】:2011-11-09 13:45:19
【问题描述】:
我有以下代码:
public Object parse(){
....
VTDGen vg = new VTDGen();
boolean parsed = vg.parseFile(myFile.getAbsolutePath(), false);
}
我正在为此方法编写单元测试。当我在不模拟VTDGen 的情况下运行该方法时,parseFile 方法返回true。但是,当我用间谍模拟它时,它会返回 false。
我的测试如下:
@Before
public void setup(){
VTDGen vtgGen = new VTDGen();
VTDGen vtgGenSpy = PowerMockito.spy(vtdGen);
PowerMockito.whenNew(VTDGen.class).withNoArguments().thenReturn(vtdGenSpy);
}
@Test
public void myTest(){
// when I run the test parseFile returns false
// if I remove the mocking in the setup, parseFile returns true
}
我的印象是 Mockito 的间谍对象不应该改变包装对象的行为,那么为什么我得到的是假而不是真?
【问题讨论】:
-
我需要您的更多帮助,无论是在您的 myTest() 方法还是在您的 parse() 方法中,或者可能是 VTDGen.parseFile()。您正在创建间谍,但我没有看到验证码。我的文件来自哪里?我可能不需要所有这些信息,但比你目前提供的更多。
-
抱歉回复晚了。周末的东西。
myTest调用parse和myFile被传入。关键是如果我注释掉PowerMockito.whenNew,vg.parseFile返回true但whenNew就位(所以使用了间谍)@ 987654334@ 返回false。我认为间谍应该只是包装对实际实例的调用,那么为什么返回的值不同? -
所以你现在没有对你的间谍进行任何实际的“间谍活动”?你怎么知道
vg.parseFile返回的是什么? -
调试器。
parse的返回不是我想要测试的,而是阻止我访问我正在测试的代码。我删除了可能影响测试的所有其他内容,并找到了导致问题的间谍。 -
vtdGenSpy.parseFile(myFile.getAbsolutePath(), false)(没有 PowerMockito)是否也返回false?
标签: java mockito powermock vtd-xml