- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下尝试模拟 java.nio.file.Files 的示例单元测试,但此模拟不起作用并且代码尝试删除示例路径。
@Test
public void testPostVisitDirectory() throws Exception {
Path mockedPath = Paths.get("sample path");
PowerMockito.mockStatic(Files.class);
PowerMockito.doNothing().when(Files.class,
PowerMockito.method(Files.class, "delete", Path.class));
DeleteDirVisitor visitor = new DeleteDirVisitor(false);
Assert.assertEquals("The was a problem visiting the file",
FileVisitResult.CONTINUE,
visitor.postVisitDirectory(mockedPath, null));
}
知道哪里出了问题吗?
这是visitor.postVisitDirectory
方法的内容
[...]
if (e == null) {
Files.delete(dir);
return FileVisitResult.CONTINUE;
}
[...]
谢谢,
最佳答案
我在使用 powermock 1.5.1 和 Files 类时遇到了类似的问题,并怀疑它在静态模拟一些/所有 jdk1.7 类时有问题,尽管我不知道为什么。我还检查了 javassist 版本,当时是最新的 (3.18.0-GA),
我将我的测试类剥离到文件行,但它仍然不起作用。然后我决定尝试模拟另一个静态类 StringUtils.chop("string"); (commons-lang3) 然后我的 powermock 测试成功了,我能够强制它从模拟中生成异常。
这向我证明我已经按照书上的规定完成了所有操作,并且静态模拟不适用于 Files 类,但它适用于 StringUtils。
顺便说一句,我更改了 @PrepareForTest 和 PowerMockito.mockStatic() 调用以引用正确的类。
最后我放弃了 mocking Files。提醒一下,以防其他人遇到同样的问题。
编辑。得到它的工作:因为我在另一个项目中需要它,所以我再次尝试了这个。有一个较新版本的 PowerMock out (1.5.3) 使用更新的 javassist (3.18.1-GA) 修复了我在对另一条评论的回复中提到的错误。
即使您正在测试的类不公开静态方法。对于其他静态模拟,我之前不需要这样做。我不知道为什么需要它或对 Files
有不同的作用。
例子:
public class MyTestClass {
public void justToTestMocking(Path path) throws IOException {
if (!Files.exists(path)) {
throw new IllegalArgumentException("I know there is a deleteIfExists() but I am just testing mocking");
}
Files.delete(path);
}
}
下面的测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Files.class, MyTestClass.class})
public class MyTestClassTest {
@Before
public void setUp() {
mockStatic(Files.class);
}
@Test
public void justToTestMocking_WillDeletePath() throws IOException {
Path path = mock(Path.class);
MyTestClass test = new MyTestClass();
when(Files.exists(path)).thenReturn(true);
test.justToTestMocking(path);
verifyStatic();
Files.delete(path);
}
}
关于java - 静态模拟不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14966748/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!