Java7&8在使用Mockito和PowerMockRunner时弹出新的错误,当涉及静态final变量时,java将抛出字节代码异常中的错误。这是由于现在更严格的字节码验证和模拟静态最终对象编辑字节码,以便成功模拟。
我有以下的类,我试图嘲弄:
public class ClassToBeMocked {
private static final int LIMIT_FROM_PROPERTIES = AnotherClazz.methodToRetrieveFromMap("String being called")
//more stuff
}
我已经看到,您可以通过使用反射来解决这个问题,这里看到了如何使用JUnit、EasyMock或PowerMock模拟静态最终变量,这里看到了PowerMock:mock out private static final variable,一个具体的示例(不是一个很好的解决方案,但应该可以工作)。但是,使用反射要求对象已经实例化,而我在尝试实例化ClasstObeMocked时会得到字节码异常。
我还尝试过在单元测试中嘲弄AnotherClazz.MethodToRetrieveFromMap(String)(使用正确的语法):
Mockito.when( AnotherClazz.methodToRetrieveFromMap("String being called") ).thenReturn(10);
但是,这会再次导致字节码错误。
有没有一种方法可以绕过这条第22条军规,或者一个不同的框架或单元运行器,会更好地使用?
我觉得不反思是没有办法做到这一点的。无论如何,我认为如果您需要更改static final
常量,那么您的设计中可能存在一些“错误”,尽管您只需要在测试范围内更改它。
正如您在问题中所说的,有一些方法可以使用PowerMock/EasyMock
来实现,但它们仍然是反射。
我将等待其他答案中可能的替代方案。
问题内容: 我正在尝试模拟私有静态方法。见下面的代码 这是我的测试代码 但是我运行的每个瓦片都会出现此异常 我想我在嘲弄东西时做错了什么。有什么想法我该如何解决? 问题答案: 为此,您可以使用和。 此外,您必须在测试类中指定PowerMock运行器,并准备要进行测试的类,如下所示: 希望对您有帮助。
问题内容: 我在类中使用 私有静态最终LOGGER 字段,并且我希望 LOGGER.isInfoEnabled() 方法返回 false 。我如何通过使用Mockito或jMockit模拟静态的final字段 我的课是: 其junit为: 当我运行它的结果是: 我是jmockit的新手,我希望上述junit案例能够成功运行。而且我必须使用JMockit或Mockito,不能使用Powermocki
我在我的类中使用私有静态final LOGGER字段,我希望LOGGER.isInfoEnabled()方法返回false。如何使用mockito或jMockit模拟静态final字段 我的课是: 当我运行它时,结果是: 我是jmockit新手,我希望上面的junit案例能够成功运行。我只能用JMockit或mockito,不能用powermockito。请帮帮忙。
} 当我做它将打印芒果,但它仍然在打印苹果。如果有人能帮助我只使用MOCKITO而不是PowerMock等。
如何模拟dao.create()调用?
我正在尝试用Groovy编写一些Spock测试,以测试一些Java代码(特别是一个servlet过滤器)。我有一些和变量想要模拟,但我无法确定是否有方法可以这样做。我知道可用于方法,对于变量有类似的东西吗? 感谢十五世。我现在可以用以下内容来设置: