ผลต่างระหว่างรุ่นของ "Oop lab/unit testing slick2d"
Jittat (คุย | มีส่วนร่วม) (หน้าที่ถูกสร้างด้วย ': ''หน้านี้เป็นส่วนหนึ่งของ oop lab.'' เราต้องการจะเขี...') |
Jittat (คุย | มีส่วนร่วม) |
||
แถว 1: | แถว 1: | ||
: ''หน้านี้เป็นส่วนหนึ่งของ [[oop lab]].'' | : ''หน้านี้เป็นส่วนหนึ่งของ [[oop lab]].'' | ||
− | เราต้องการจะเขียน unit test กับโค้ดใน Slick2D | + | เราต้องการจะเขียน unit test กับโค้ดใน Slick2D อย่างไรก็ตามโค้ดส่วนของ Entity ของเรานั้นมักมีส่วนการแสดงผลอยู่ด้วย และส่วนเหล่านี้โดยมากจะทำงานไม่ได้ใน unit test หรือไม่ก็ทำให้การเตรียมการต่าง ๆ มีปัญหา ยกตัวอย่างเช่น สมมติว่า ถ้าใน constructor ของคลาส Bullet มีการเปิดไฟล์ Image เช่นดังโค้ดด้านล่าง |
+ | |||
+ | <syntaxhighlight lang="java"> | ||
+ | public Bullet(float x, float y) { | ||
+ | try { | ||
+ | Image img = new Image("res/ship.png"); // this line is problematic. | ||
+ | } catch (SlickException e) { | ||
+ | e.printStackTrace(); | ||
+ | } | ||
+ | this.setXY(x,y); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | และในโค้ด unit test ของเรา เป็นดังนี้ | ||
+ | |||
+ | <syntaxhighlight lang="java"> | ||
+ | public class BulletTest { | ||
+ | @Test | ||
+ | public void test() { | ||
+ | Bullet b = new Bullet(10,20); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | เมื่อเราเรียกให้ unit test ทำงาน เราจะพบ error ดังนี้ | ||
+ | |||
+ | java.lang.RuntimeException: No OpenGL context found in the current thread. | ||
+ | at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124) | ||
+ | at org.lwjgl.opengl.GL11.glGetError(GL11.java:1289) | ||
+ | at org.newdawn.slick.opengl.renderer.ImmediateModeOGLRenderer.glGetError(ImmediateModeOGLRenderer.java:384) | ||
+ | at org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:249) | ||
+ | at org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:187) | ||
+ | ... | ||
+ | at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) | ||
+ | |||
+ | เพราะว่าจะเปิด Image ได้นั้น โปรแกรมของเราจะต้องมีการจัดการเปิดหน้าต่างและจัดการเกี่ยวกับ OpenGL ก่อน ซึ่งในส่วนนี้ เรามักจะไม่ดำเนินการใน Unit test |
รุ่นแก้ไขเมื่อ 04:32, 21 กันยายน 2557
- หน้านี้เป็นส่วนหนึ่งของ oop lab.
เราต้องการจะเขียน unit test กับโค้ดใน Slick2D อย่างไรก็ตามโค้ดส่วนของ Entity ของเรานั้นมักมีส่วนการแสดงผลอยู่ด้วย และส่วนเหล่านี้โดยมากจะทำงานไม่ได้ใน unit test หรือไม่ก็ทำให้การเตรียมการต่าง ๆ มีปัญหา ยกตัวอย่างเช่น สมมติว่า ถ้าใน constructor ของคลาส Bullet มีการเปิดไฟล์ Image เช่นดังโค้ดด้านล่าง
public Bullet(float x, float y) {
try {
Image img = new Image("res/ship.png"); // this line is problematic.
} catch (SlickException e) {
e.printStackTrace();
}
this.setXY(x,y);
}
และในโค้ด unit test ของเรา เป็นดังนี้
public class BulletTest {
@Test
public void test() {
Bullet b = new Bullet(10,20);
}
}
เมื่อเราเรียกให้ unit test ทำงาน เราจะพบ error ดังนี้
java.lang.RuntimeException: No OpenGL context found in the current thread.
at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124) at org.lwjgl.opengl.GL11.glGetError(GL11.java:1289) at org.newdawn.slick.opengl.renderer.ImmediateModeOGLRenderer.glGetError(ImmediateModeOGLRenderer.java:384) at org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:249) at org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:187) ... at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
เพราะว่าจะเปิด Image ได้นั้น โปรแกรมของเราจะต้องมีการจัดการเปิดหน้าต่างและจัดการเกี่ยวกับ OpenGL ก่อน ซึ่งในส่วนนี้ เรามักจะไม่ดำเนินการใน Unit test