22
Friday, May 6, 2 022 Unit Testing Introduction

Unit Testing

Embed Size (px)

Citation preview

Page 1: Unit Testing

Wednesday, April 12, 2023

Unit Testing

Introduction

Page 2: Unit Testing

Wednesday, April 12, 2023

What is Unit Testing?

• Unit Testing adalah sebuah kode yang ditulis oleh developer, yang digunakan untuk menguji bagian kecil/area spesifik dari suatu fungsionalitas dari kode yang akan ditest.

• Unit testing dilakukan untuk membuktikan apakah kode yang telah ditulis berfungsi sesuai dengan kehendak programmer.

Page 3: Unit Testing

Wednesday, April 12, 2023

Why Unit Testing?

Secara implisit, unit testing akan membuat hidup seorang programmer menjadi lebih “mudah”.

Kenapa?

Page 4: Unit Testing

Wednesday, April 12, 2023

Why Unit Testing?(continued)

• Unit testing akan memperbaiki design code dan mengurangi waktu yang digunakan untuk debugging secara drastis.

• Building house of cards, adalah perumpamaan yang tepat untuk menggambarkan proses coding tanpa testing. Karena bila pondasi/dasar dari bangunan tersebut labil, maka bagian-bagian yang dibangun diatasnya juga akan terpengaruh dan akhirnya runtuh.

• Perubahan kecil pada suatu modul/unit akan merambat hingga ke level yang lebih tinggi, yang tentunya juga membutuhkan perbaikan. Oleh karena itu, perubahan pada level dasar harus ditest sebelum mempengaruhi level yg lebih tinggi.

Page 5: Unit Testing

Wednesday, April 12, 2023

Who performs Unit Testing?

• Unit testing dilakukan oleh programmer yang menuliskan suatu modul/unit tertentu.

• Test code tidak akan dikirimkan ke user, jadi hanya production code (kode yang digunakan dalam program utama) yang di-deliver ke user.

Page 6: Unit Testing

Wednesday, April 12, 2023

When to test a unit?

• Unit testing dilakukan setelah programmer selesai menuliskan suatu kode/fungsi/method yang ada dalam suatu class.

• Dapat juga dilakukan setelah menambahkan sebuah fungsionalitas baru atau setelah melakukan refactoring.

Page 7: Unit Testing

Wednesday, April 12, 2023

How?

Unit testing membutuhkan suatu tools yang spesifik untuk tiap-tiap bahasa pemrograman. Dan tools tersebut terpisah dengan bahasa pemrograman. Beberapa contoh tools yang digunakan pada unit testing :

• CUnit : digunakan untuk bahasa C• JUnit : digunakan untuk bahasa Java• VBUnit : digunakan untuk bahasa Basic• NUnit : digunakan untuk bahasa C# (baca: c-sharp)• PHPUnit : digunakan untuk bahasa PHP

Page 8: Unit Testing

Wednesday, April 12, 2023

Unit Testing with JUnit

Page 9: Unit Testing

Wednesday, April 12, 2023

• Seperti yang telah disebutkan sebelumnya, unit testing menggunakan sebuah kelas (test class) yang akan menguji kelas lain.

• Sebuah test class hanya akan menguji satu class saja.

• Dalam sebuah test class terdapat beberapa test method yang digunakan untuk menguji method-method pada kelas lain. Sebuah method dapat diuji oleh lebih dari satu test method.

Unit Testing with JUnit

Page 10: Unit Testing

Wednesday, April 12, 2023

• Pada contoh diatas, sebuah method createAccount() pada class Account.java diuji oleh 3 buah test method.

• Perlu diperhatikan, diantara ketiga test method menguji beberapa kemungkinan yang akan menyebabkan method createAccount() melakukan kesalahan. Sebagai contoh, method testCreateAcctDup() akan menguji apakah yang akan terjadi bila method createAccount() menemui error bila terjadi duplikasi dalam membuat account.

Unit Testing with JUnit

Page 11: Unit Testing

Wednesday, April 12, 2023

Naming convention

Dalam unit testing, terdapat beberapa aturan penamaan yang harus diikuti. Sebuah test class harus memiliki nama yang sama dengan class yang akan di-test dan diberi prefix “test”.

Contoh:Sebuah class Account akan memiliki sebuah test class

dengan nama TestAccount.

Penamaan tersebut dimaksudkan untuk mempermudah dalam mengorganisasi unit testing.

Page 12: Unit Testing

Wednesday, April 12, 2023

• Berbeda dengan penamaan test class, sebuah test method “harus” didahului dengan prefix “test”, kemudian diikuti oleh classname, sesuai dengan nama class yang akan di-test

• Bila test method tidak menggunakan prefix test, maka method tersebut tidak akan dieksekusi oleh JUnit.

• Cara lainnya adalah dengan menggunakan test suite dan memasukkan test method tersebut ke dalam test suite. Dengan demikian, JUnit akan tetap mengeksekusi method tersebut meskipun nama method tersebut tidak menggandung kata “test”.

Naming convention

Page 13: Unit Testing

Wednesday, April 12, 2023

Test Class

• sebuah test class harus merupakan turunan (extends) dari class junit.framework.TestCase

• Untuk dapat menggunakan semua fungsi yang ada dalam package JUnit, kita harus meng-import junit.framework.* pada tiap test class yang akan kita tulis.

import junit.framework.*;public class TestAccount extends TestCase {

...}

Page 14: Unit Testing

Wednesday, April 12, 2023

Fixtures

public void testTotalBelanja() { Pembayaran pmb = new Pembayaran(); assertEquals(3000,pmb.TotalBelanja(new int[] {1000,2000})); }

public void testBelanjaNull() { Pembayaran pmb = new Pembayaran(); assertEquals(0,pmb.TotalBelanja(new int[] {}));

}

• Pada contoh diatas terlihat duplikasi code instansiasi objek. Baris tersebut akan kita gunakan bila kita akan membuat test method yang akan melakukan test terhadap class, pada kasus ini class Pembayaran. Dan pada umumnya baris tersebut (fixture) merupakan starting point dari tiap test method.

• JUnit menyediakan fasilitas untuk meng-ekstrak fixture tersebut ke dalam sebuah method yang bernama setUp()

Page 15: Unit Testing

Wednesday, April 12, 2023

private Pembayaran pmb;protected void setUp() {

Pembayaran pmb = new Pembayaran();}public class testUseCredit() {

assertEquals(pmb.isCreated());}public class testTotalBelanja() {

assertEquals(3000,pmb.TotalBelanja(new int[] {1000,2000}));}

Fixtures (cont)

• Dengan menggunakan method setUp(), kita tidak perlu lagi melakukan instansiasi objek di setiap test method.

• Penggunaan method setUp() ini memastikan bahwa perubahan terhadap objek yang terdapat dalam fixture yang disebabkan oleh salah satu test case tidak mempengaruhi test case lainnya

Page 16: Unit Testing

Wednesday, April 12, 2023

Fixtures (cont)

JUnit juga menyediakan method tearDown( ), yang berfungsi untuk membersihkan test environment setelah melakukan sebuah test. Perhatikan contoh dibawah ini.

protected void setUp() {

dbConn = new Connection(“oracle”,1521,”fred”,”foobar”);

dbConn.Connect();

}

protected void tearDown() {

dbConn.disconnect();

dbConn = null;

}

Page 17: Unit Testing

Wednesday, April 12, 2023

Test Suite

• Test Runner yang digunakan mempunyai fitur untuk mencari sekumpulan test case dalam suatu test class. Agar fitur tersebut dapat berfungsi, kita harus mendefinisikan method TestSuite( ), yang mengembalikan instance TestCase atau TestSuite. Keduanya merupakan implementasi dari interface class Test

• Test Suite juga dapat digunakan untuk mengeksekusi test method, dimana nama test method tersebut tidak menggunakan kata “test”

Page 18: Unit Testing

Wednesday, April 12, 2023

...

public void Negative(){

assertEquals(-7,lrg.largest(new int[] {-7,-8,-9})); }

public static Test suite() {

TestSuite suite=new TestSuite();

suite.addTest(new TestLargest("testSimple"));

suite.addTest(new TestLargest("Negative"));

return suite;

}

...

Test Suite

Page 19: Unit Testing

Wednesday, April 12, 2023

Method Assert

Method assert adalah suatu method yang akan membantu dalam menentukan sebuah method yang sedang ditest/diuji berjalan dengan baik atau tidak. Bila sebuah method mengalami kegagalan, eksekusi dari test method tersebut akan dibatalkan sedangkan test untuk method yang lainnya akan tetap berjalan.

Page 20: Unit Testing

Wednesday, April 12, 2023

assertEquals

assertEquals([String message], expected, actual)

assertNull

assertNull([String message], java.lang.Object object)

assertTrue

assertTrue([String message], boolean condition)

Method Assert

Page 21: Unit Testing

Wednesday, April 12, 2023

• Perlu diingat bahwa method assert dapat langsung mengeksekusi method dengan nilai balikan (fungsi)

• Sedangkan untuk menguji sebuah prosedur (void), kita harus melakukan perubahan dalam baris yang ada dalam test method tersebut.

Method Assert

Page 22: Unit Testing

Wednesday, April 12, 2023

Test Runner

JUnit menyediakan 3 buah class user interface yangdapat digunakan untuk melakukan unit testing, yaitu :

• junit.textui.TestRunnerBerbasis text

• junit.awtui.TestRunner Menggunakan tampilan Abstract Window Toolkit

(AWT) yang sederhana• junit.swingui.TestRunner Menggunakan tampilan berbasis SWING dengan

fitur yang cukup lengkap