如何在不同包中测试 child 中的 public 方法时从抽象 parent 模拟或存根受保护的方法
How to Mock or Stub a protected method from abstract parent while testing a public method in child with both in different packages
我有无法更改的遗留代码,但我需要用 JUnit 测试来覆盖。我一直在尝试各种 Mockito 和 PowerMockito 的用法,但都无济于事。
摘要Parent
package com.parent;
public abstract class Parent {
public Parent() {
}
protected void badMethod() {
//code
}
// public methods
}
Public Child
package com.child;
public class Child extends Parent {
public void methodToTest() {
//code
badMethod();
//code
}
}
我需要测试的代码出现在调用 badMethod() 之后。有没有办法存根、模拟或绕过 badMethod() 调用? child class.
中没有 badMethod() 的 @Override
badMethod() 调用尝试建立数据库连接,并调用其他服务。我实际测试的代码不需要这些。
您可以在测试中扩展 class Child
并在新的 class 中扩展 "disable" badMethod
。
public class YourTest {
@Test
public void testSomething() {
Child child = new ChildWithDisabledBadMethod();
child.methodToTest();
//put your assertions here
}
private static class ChildWithDisabledBadMethod extends Child {
protected void badMethod() {
}
}
}
我有无法更改的遗留代码,但我需要用 JUnit 测试来覆盖。我一直在尝试各种 Mockito 和 PowerMockito 的用法,但都无济于事。
摘要Parent
package com.parent;
public abstract class Parent {
public Parent() {
}
protected void badMethod() {
//code
}
// public methods
}
Public Child
package com.child;
public class Child extends Parent {
public void methodToTest() {
//code
badMethod();
//code
}
}
我需要测试的代码出现在调用 badMethod() 之后。有没有办法存根、模拟或绕过 badMethod() 调用? child class.
中没有 badMethod() 的 @OverridebadMethod() 调用尝试建立数据库连接,并调用其他服务。我实际测试的代码不需要这些。
您可以在测试中扩展 class Child
并在新的 class 中扩展 "disable" badMethod
。
public class YourTest {
@Test
public void testSomething() {
Child child = new ChildWithDisabledBadMethod();
child.methodToTest();
//put your assertions here
}
private static class ChildWithDisabledBadMethod extends Child {
protected void badMethod() {
}
}
}