Java:如何在静态子对象中模拟受保护的方法 class
Java: How to Mock a protected method inside a static child class
我在静态子 class 中有一个受保护的方法。我是 运行 一个测试用例,它成功了但是代码覆盖率没有增加。
public class A{
private static final String var1 = "key1";
protected static class B extends OsCmd{
private String abc1;
private String abc2;
protected B(String xyz, String xyz2) {
this.abc1 = xyz;
this.abc2 = xyz2;
}
@Override
protected void updateEnv(Map<String, String> env) {
env.put(VAR1, "FALSE");
env.put(VAR2, "TRUE");
env.put("key3", abc1);
env.put("key4", abc2);
}
}
}
下面是我的测试用例
@ExtendWith(MockitoExtension.class)
public class ATest {
private A mockA;
@BeforeEach
public void setup() {
mockA = Mockito.spy(A.class);
}
@Test
public void test2() {
try (MockedConstruction mockedConstruction =
mockConstruction(A.B.class)) {
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
A.B mockB =
new A.B("a", "b");
//doNothing().when(mockB).updateEnv(map);
mockB.updateEnv(map);
}
}
}
有人可以帮忙吗,我做错了什么?
当您模拟构造函数时,所有内部方法调用也会被模拟,不会通过实际代码。
如果删除以下内容try-with-resources:
try (MockedConstruction mockedConstruction =
mockConstruction(A.B.class))
真正的代码会被执行,覆盖率会增加
我在静态子 class 中有一个受保护的方法。我是 运行 一个测试用例,它成功了但是代码覆盖率没有增加。
public class A{
private static final String var1 = "key1";
protected static class B extends OsCmd{
private String abc1;
private String abc2;
protected B(String xyz, String xyz2) {
this.abc1 = xyz;
this.abc2 = xyz2;
}
@Override
protected void updateEnv(Map<String, String> env) {
env.put(VAR1, "FALSE");
env.put(VAR2, "TRUE");
env.put("key3", abc1);
env.put("key4", abc2);
}
}
}
下面是我的测试用例
@ExtendWith(MockitoExtension.class)
public class ATest {
private A mockA;
@BeforeEach
public void setup() {
mockA = Mockito.spy(A.class);
}
@Test
public void test2() {
try (MockedConstruction mockedConstruction =
mockConstruction(A.B.class)) {
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
A.B mockB =
new A.B("a", "b");
//doNothing().when(mockB).updateEnv(map);
mockB.updateEnv(map);
}
}
}
有人可以帮忙吗,我做错了什么?
当您模拟构造函数时,所有内部方法调用也会被模拟,不会通过实际代码。
如果删除以下内容try-with-resources:
try (MockedConstruction mockedConstruction =
mockConstruction(A.B.class))
真正的代码会被执行,覆盖率会增加