Java 监视莫基托的一条小路

Java 监视莫基托的一条小路,java,mockito,nio,Java,Mockito,Nio,我正在尝试使用Mockito在路径上进行侦察 dirSpy = spy(Files.createTempDirectory(DIR_NAME)); 我得到一个错误,说 Mockito无法模拟此类:类sun.nio.fs.UnixPath Mockito只能模拟可见和非最终类。 如果您不确定为什么会出现此错误,请向邮件列表报告 [如果您认为需要,我可以发布更长的堆栈跟踪] 我假设这是因为路径有一个本机实现——我的问题是,是否有一些变通方法可以让我检查在测试期间是否访问了特定位置 我要测试的内容-

我正在尝试使用Mockito路径上进行侦察

dirSpy = spy(Files.createTempDirectory(DIR_NAME));
我得到一个错误,说

Mockito无法模拟此类:类sun.nio.fs.UnixPath
Mockito只能模拟可见和非最终类。
如果您不确定为什么会出现此错误,请向邮件列表报告

[如果您认为需要,我可以发布更长的堆栈跟踪]

我假设这是因为路径有一个本机实现——我的问题是,是否有一些变通方法可以让我检查在测试期间是否访问了特定位置

我要测试的内容- 我为每个用户都有一个目录结构——我想做一个测试,检查在没有用户的情况下,是否有多余的工作完成,以及是否没有访问所有用户的根

在我的整个测试逻辑中,这只是一个小的验证,我可以不做它——只是觉得拥有它很好

我的问题是,是否有一些变通方法可以让我检查测试期间是否访问了特定位置

是的,使用一个

请注意,如果您能够做到这一点,那么观察路径本身不会给您带来太多:除了
.toRealPath()
之外,
路径上的操作不会执行I/O操作,如果调用了它并且文件系统支持符号链接(好的,您使用一些Unix变体,因此可能就是这样)。真正的I/O是由路径的。但是你也不能侦察到

因此,
WatchService
是您最好的解决方案


有关示例,请参见。请注意,
WatchService
依赖于文件系统;这意味着您最好还是从您可以监视的类中执行文件I/O;)

在本例中,这是因为
UnixPath
sun.nio.fs
中是包私有的。但这不是最后的
。看。你试过PowerMockito吗?@Ray-谢谢。我直到现在才使用PowerMockito,我不确定我正在研究的这个特定的测试验证是否证明了这项工作所需的合理性(我的意思是,在我的开发环境中,考虑到我们拥有的特定依赖项管理方法,它可能需要一些工作)所有sun.xx类都是Java实现的私有类,并且是Mockito的禁区。有很多方法可以直接访问这些类,但确实不值得这么做。我希望能够验证是否调用了类似resolve的东西—WatchService让我识别CUD操作—而不是读取action@NoaDrach但是
.resolve()
不会读取任何内容!这只是一个产生新路径的操作,没有任何访问权限;您可以解析为不存在的路径。如果你从一开始就告诉我们你想监视什么呢?那么,为什么不比较一下之前和之后目录的访问时间呢?或者您的fs是否也安装了noatime?不要忘记,您可以从文件中获得很多属性(请参阅),这是一个很好的方向,但是-我在实际代码执行之前和之后检查了dir a上的最后访问时间,它没有改变。我认为这是因为当我有用户时,我会在我的测试设置A/User/Uploads中创建以下结构,然后在测试代码中执行
A.resolve(“User/Uploads”)
不会影响A的访问时间。我想在我的测试中没有真正的理由挖掘铲斗。但是谢谢你提出的所有观点——我想我学到了一些新东西!但是你知道,你可以通过
WatchService