如何使抽象类的方法在Java的Junit测试用例中可见?

时间:2018-06-27 08:27:58

标签: java spring junit

我需要使abstarct类的方法对JUnit测试用例可见,并且该抽象类已经扩展到我正在为其编写测试用例的另一个类。

调用该方法的方式如下:

例如,我已将 AbstractWebSocketHandler 扩展到我的类,并调用了一个 handleTextMessage 方法,该方法不受公共保护。

在我的课堂上,我这样称呼:

   AbstractWebSocketHandler webSocketHandler = new TextWebSocketHandler() {
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
 MY CODE....
}
}

我需要为此功能编写测试用例,但由于它不可见,因此我无法访问它。

为了使其可见,我尝试了以下代码:

Class<AbstractWebSocketHandler> clazz = AbstractWebSocketHandler.class;
        Method method = clazz.getDeclaredMethod("handleTextMessage");
        method.setAccessible(true);

但是没有运气。

有人可以帮我吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

我想您想测试该方法,但访问权限不是public

JUnit的限制为@Test,访问修饰符必须为public

您可以在抽象之间创建一个类以覆盖访问修饰符。

示例

抽象类

public abstract class AbstractClass {
    protect abstract void abstractMethod();
}

代理类

public abstract class ProxyParentClass extends AbstractClass {
   @Override
   public abstract void abstractMethod();
}

SubClass

public class SubClass extends ProxyParentClass{

    @Test
    @Override
    public void abstractMethod() {
        System.out.println("test");
    }
}