java - 您如何使用 Mockito 从扩展类测试方法?
问题描述
我有一个从 B 扩展的 A 类。B 有一个名为 doB() 的方法。
在我的测试中,我想在调用 doB() 时返回 A。
B类:
public String doB() {
return "B";
}
A类:
public class A extends B {
public String doA() {
String A = doB();
return A;
}
}
在我的单元测试中,我想做类似的事情:
@Mock
private A a;
@Test
public void test() {
when(a.doB()).thenReturn("PASS");
a.doB();
//check if it is "PASS"
}
但是,它在调用doB()
. 这可能吗?如果不是,那么最好的测试方法是什么?
解决方案
也许更喜欢组合而不是继承。换句话说,A应该使用B而不是A扩展B。所以B成为A的合作者。
例如:
public class B {
public String doB() {
return "B";
}
}
public class A {
private B b;
public A(B b) {
this.b = b;
}
public String doA() {
String a = b.doB();
return a;
}
}
所以你的单元测试看起来像:
public class MyTest {
@Mock
private B b;
@InjectMocks
private A a;
@Test
public void test() {
when(b.doB()).thenReturn("PASS");
a.doA();
//check if it is "PASS"
}
}
这是 TDD 如何有助于良好设计的一个示例。
推荐阅读
- javascript - 当我运行此代码时,我没有得到任何输出,请提供任何建议或更正
- r - 将数据框更改为具有 1 和 0 的另一个数据框
- android - 获得相机权限后不显示预览
- python - 如何将 boxstyle 用于 pad 和 round 用于矩形?
- android - 如何在打开另一个 mapbox 实例之前卸载 mapbox
- java - 为什么 GET 资源没有响应请求
- r - 带有 ggplots 和 treemapify 的图表 Treemap
- angular - Angular 7 无法加载图像
- drupal-8 - 动态实体参考 - info.yml 中缺少核心键
- javascript - 将包含包含的 div 刷新到其他 php 文件