Я не хочу проверять некоторые вещи с открытым gl в тестовом модуле Android.
Если я не ошибаюсь, все тесты выполняются внутри обычного устройства, поэтому я подумал, что вызовы opengl также должны работать.
Тем не менее, это не тот случай, или я что-то упустил (так что я надеюсь).
Я объявил новый проект и очень простой тестовый проект, чтобы оценить это.
Итак, вот мои тесты:
package com.example.test;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import android.opengl.GLES20;
import android.test.ActivityInstrumentationTestCase2;
import android.test.UiThreadTest;
import com.example.HelloTesingActivity;
public class AndroidTest extends ActivityInstrumentationTestCase2<HelloTesingActivity> {
public AndroidTest(String pkg, Class<HelloTesingActivity> activityClass) {
super(pkg, activityClass);
}
private HelloTesingActivity mActivity;
public AndroidTest() {
super("com.example", HelloTesingActivity.class);
}
public void testTrue(){
assertTrue(true);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mActivity = getActivity();
}
public void testPreConditions() throws Exception {
assertNotNull(mActivity); // passes
}
/*
* FAILS
*/
@UiThreadTest // ensures this test is run in the main UI thread.
public void testGlCreateTexture(){
IntBuffer buffer = newIntBuffer();
GLES20.glGenTextures(1, buffer);
assertFalse(buffer.get() == 0); // this fails
}
/**
* just a helper to setup a correct buffer for open gl to write the values into
* @return
*/
private IntBuffer newIntBuffer() {
ByteBuffer buff = ByteBuffer.allocateDirect(4);
buff.order(ByteOrder.nativeOrder());
buff.position(0);
return buff.asIntBuffer();
}
/*
* FAILS
*/
@UiThreadTest
public void testGlCalls(){
GLES20.glActiveTexture(1); // set the texture unit to 1 since 0 is the default case
IntBuffer value = newIntBuffer();
GLES20.glGetIntegerv(GLES20.GL_ACTIVE_TEXTURE, value );
assertEquals(1, value.get()); // this fails with expected: 1 but was: 0
}
}
А вот и сама деятельность, только для удобства.
package com.example;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
public class HelloTesingActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GLSurfaceView surface = new GLSurfaceView(this);
surface.setEGLContextClientVersion(2);
setContentView(surface);
surface.setRenderer(new MyRenderer());
}
}
package com.example;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView.Renderer;
public class MyRenderer implements Renderer {
@Override
public void onDrawFrame(GL10 arg0) {
// TODO Auto-generated method stub
}
@Override
public void onSurfaceChanged(GL10 arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onSurfaceCreated(GL10 arg0, EGLConfig arg1) {
// TODO Auto-generated method stub
}
}