如何为 opengl es2.0 android 应用编写 junit 测试
how to writing junit test for opengl es2.0 android app
我是这个 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 为上述片段编写单元测试。可能吗?可以的话怎么写?
单元测试测试您的业务逻辑。他们特别不适用于涉及 android sdk 的任何内容(包括片段)
无法通过任何 android 测试框架测试 GLSurfaceView。 UiAutomator 和 Espresso 都需要一个视图来测试(例如一个按钮来点击),而 open gl 之所以如此之快,部分原因是它不属于视图树。 "view" android 唯一知道的是 GLSurfaceView。
您可能能够仅记录触摸事件并通过 adb send touch events 重播它们以与应用交互。它会起作用,但它很脆弱。
我是这个 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 为上述片段编写单元测试。可能吗?可以的话怎么写?
单元测试测试您的业务逻辑。他们特别不适用于涉及 android sdk 的任何内容(包括片段)
无法通过任何 android 测试框架测试 GLSurfaceView。 UiAutomator 和 Espresso 都需要一个视图来测试(例如一个按钮来点击),而 open gl 之所以如此之快,部分原因是它不属于视图树。 "view" android 唯一知道的是 GLSurfaceView。
您可能能够仅记录触摸事件并通过 adb send touch events 重播它们以与应用交互。它会起作用,但它很脆弱。