如何为opengl es2.0 android app编写junit测试

时间:2017-07-11 12:55:49

标签: android junit opengl-es mockito opengl-es-2.0

我是这个Android测试的新手。我想要的是为我的片段写一个junit(用Mockito)测试,这是一个带有一个自定义GLRenderer的GLSurfaceView。

public class SuefaceViewFragment extends Fragment{

private View mRootView;

private GLSurfaceView mSurfaceView;
private CustomRenderer mRenderer;


public SurfaceViewFragment() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mRootView = inflater.inflate(R.layout.fragment_surface_view, container, false);
    initView();
    return mRootView;
}


private void initView() {
    mSurfaceView = (GLSurfaceView) mRootView.findViewById(R.id.surface_view);

    mSurfaceView .setRenderer(mRenderer);
    mSurfaceView .setZOrderMediaOverlay(true);        
    mSurfaceView .setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
}


@Override
public void onResume() {
    super.onResume();
    mSurfaceView.onResume();
}

@Override
public void onPause() {
    super.onPause();
    mSurfaceView.onPause();
}

}

这是GLSurfaceView

public class CustomRenderer implements GLSurfaceView.Renderer {




public CustomRenderer() {

}



private void init() {

    GLES20.glDisable(GLES20.GL_BLEND);
    GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    init();
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
    GLES20.glViewport(0, 0, width, height);

}

@Override
public void onDrawFrame(GL10 gl) {

    render();
}

private void render() {
    GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT);

   // To Do Rendering code

}

我想使用Junit和Mockito为上面的片段编写单元测试。可能吗?如果可能怎么写?

1 个答案:

答案 0 :(得分:0)

单元测试测试您的业务逻辑。它们特别适用于涉及android sdk(包括片段)的任何内容

任何Android测试框架都无法测试GLSurfaceView。 UiAutomator和Espresso都需要一个视图来测试(例如,一个按钮点击)以及open gl如此之快的原因部分是因为它不属于视图树。 android知道的唯一“视图”是GLSurfaceView。

可能能够记录触摸事件并通过adb发送触摸事件重播它们以与应用进行交互。它会起作用,但它很脆弱。