找不到PowerMockito和Java 8 ZoneDateTime toInstant()

找不到PowerMockito和Java 8 ZoneDateTime toInstant(),datetime,java-8,powermock,Datetime,Java 8,Powermock,我运行我的测试时: @RunWith(PowerMockRunner.class) @PrepareForTest(MyStuff.class) public class MyStuffTest { ..whatever 在我将zoneDateTime类添加到该代码后,它开始失败,出现以下错误: java.lang.IllegalStateException:无法转换名为的类 MyCode原因:[源错误]中未找到toInstant() java.time.zoneDateTime 在我的代码中

我运行我的测试时:

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyStuff.class)
public class MyStuffTest { ..whatever
在我将
zoneDateTime
类添加到该代码后,它开始失败,出现以下错误:

java.lang.IllegalStateException:无法转换名为的类 MyCode原因:[源错误]中未找到toInstant() java.time.zoneDateTime

在我的代码中,我有:

long longTimeNoSee = ZonedDateTime.parse(getateTimeString()).toInstant().toEpochMilli();

我猜这是powermock中的一个bug。但也许有人有了一些想法(?)

这似乎确实是Powermock中的一个bug。看

您可能希望添加示例并投票支持此问题


更新:根据Powermock的说法,这似乎是javassist中的一个问题:

我也有同样的问题。使用
Instant.from()
修复了此问题

因此,在您的情况下,以下内容应该有效:
ZonedDateTime.parse(Instant.from(getateTimeString())).toEpochMilli()

使用powermockito版本1.6.6或更高版本


此外,请确保使用最新的javassist版本或至少3.23.0-GA

注意:严格适用于在此处尝试了所有操作但仍无法运行的用户

我刚刚将包含using
toInstant()
的方法移动到一个新的助手类中

现在一切都很好

因此,我建议您创建一个新的
Helper/Util
Date\u Helper
类,或者将相关代码移动到现有的 班级。现在,您可以从 您正在尝试测试


不需要更新依赖项。只是一个小小的解决办法。

您好。你处理好这个问题了吗?isBefore()方法的情况与此完全相同。尽管我运行的是使用Javassist 3.20.0的PowerMock 1.6.5,但我仍然看到了此错误,因此应该包括对该问题的修复。@JustinEmery我也遇到了同样的问题。我们使用PowerMock 1.6.6,其中错误被标记为已修复。我们的测试还是失败了。我做了一些研究,结果发现我们的项目库使用了一个较旧版本的javassist,它是在以前加载的。因此,请检查您的库是否包含早期的javassist版本。更新这些JAR为我解决了这个问题。升级
javassist
3.23.0-GA
powermock
1.7.4
对我有效。最新的javassist版本(目前为3.23.1-GA)不起作用。手动添加版本3.23.0-GA的javassist依赖项,就像你说的那样,为我修复了它。