gpt4 book ai didi

java - 如何使用 powermock 或任何模拟工具模拟父类(super class)的 java 方法?

转载 作者:行者123 更新时间:2023-11-30 08:03:42 25 4
gpt4 key购买 nike

超一流

public class BasicDao {
public Object createQuery() {
return new Object();
}
}

实现

public class MyDAO implements BasicDao {
public Object getMyData() {
Object obj = createQuery();
// more code...
return ...;
}
}

我需要测试 getMyData() 方法,并且我想模拟/抑制 createQuery() 方法,因为它会在测试环境中失败。

谢谢!

最佳答案

不要以这种方式进行测试。这称为部分模拟,这是错误的,这意味着编写的代码没有使用良好的面向对象设计。人们应该青睐Composition OVER Inheritance .

尽管如此,DAO 是代表系统边界的对象,即

  • 一侧是面向对象
  • 一侧是关系

在这种情况下,您应该编写集成测试,

  • 将数据插入数据库、实际实例或内存实例( h2hsqldb 、...)
  • 准备好您的数据,这里有很多可能性( DbUnitDbSetup 、 ...)
  • 在此数据库上配置并运行 DAO 测试

它可能需要更多的设置和更多的时间来运行,但从长远来看它更好。

  • 更强大的 map 测试
  • 更容易更改技术实现,而无需更改测试
  • 针对数据库运行,您可以更快地检测配置问题/挑战,并确保它们在 3 年后不会出现问题
<小时/>

@user3386493 的答案在技术上是正确的,但我建议对 spy 使用这种 stub (否则执行实际的方法代码):

MyDAO daoSpy = Mockito.spy(new MyDAO());
doReturn(new Object()).when(daoSpy).createQuery();

关于java - 如何使用 powermock 或任何模拟工具模拟父类(super class)的 java 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31487299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com