ผลต่างระหว่างรุ่นของ "Oop lab/unit testing slick2d"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
(หน้าที่ถูกสร้างด้วย ': ''หน้านี้เป็นส่วนหนึ่งของ oop lab.'' เราต้องการจะเขี...')
 
แถว 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