Menu
CoddyTech

Pengujian dan Integrasi

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 104 dari 107.

challenge icon

Tantangan

Mudah

Mari tuntaskan Library Management System-mu dengan menulis tes yang memastikan semuanya berfungsi dengan benar! Kamu akan membuat file tes untuk memvalidasi fungsi inti library-mu: memastikan buku dapat dipinjam dan dikembalikan dengan benar, serta kondisi error ditangani dengan benar.

Kamu akan mengatur kodemu dalam lima file:

  • book.go: struct Book-mu dengan field ID, Title, Author, ISBN, dan Available. Sertakan konstruktor NewBook yang menginisialisasi buku sebagai tersedia.
  • user.go: struct User-mu dengan field ID, Name, Email, dan BorrowedBooks. Sertakan konstruktor NewUser.
  • library.go: struct Library-mu dengan map untuk buku dan pengguna, beserta method NewLibrary, AddBook, AddUser, Borrow, dan Return. Method Borrow harus mengembalikan error untuk pengguna tidak valid, buku tidak valid, atau buku yang tidak tersedia. Method Return harus mengembalikan error untuk pengguna tidak valid, buku tidak valid, atau buku yang belum dipinjam.
  • library_test.go: Di sinilah kamu akan menulis fungsi tes! Buat tes untuk memverifikasi:
    • TestBorrowSuccess: Verifikasi bahwa peminjaman buku yang tersedia berhasil (tidak ada error yang dikembalikan), buku menjadi tidak tersedia, dan ID buku ditambahkan ke list buku yang dipinjam oleh pengguna
    • TestBorrowUnavailable: Verifikasi bahwa meminjam buku yang sudah dipinjam akan mengembalikan error
    • TestBorrowInvalidUser: Verifikasi bahwa peminjaman dengan ID pengguna yang tidak ada akan mengembalikan error
    • TestReturnSuccess: Verifikasi bahwa pengembalian buku yang dipinjam berhasil, buku kembali tersedia, dan ID buku dihapus dari list buku yang dipinjam oleh pengguna

    Setiap tes harus menyiapkan library sendiri dengan buku dan pengguna yang diperlukan, melakukan operasi, lalu memeriksa hasilnya menggunakan t.Error atau t.Errorf jika pemeriksaan gagal.

  • main.go: Jalankan tes secara manual dan laporkan hasilnya. Baca nama tes yang akan dijalankan (borrow_success, borrow_unavailable, borrow_invalid_user, atau return_success). Berdasarkan nama tes, siapkan skenario yang sesuai dan cetak PASS jika semua pemeriksaan berhasil, atau FAIL: [reason] jika ada pemeriksaan yang gagal.

Input berikut akan diberikan:

  • Nama tes: borrow_success, borrow_unavailable, borrow_invalid_user, atau return_success

Untuk setiap tes, gunakan data tes standar berikut:

  • Buku: ID B001, Judul Go Programming, Penulis John Doe, ISBN 123-456
  • Pengguna: ID U001, Nama Alice, Email alice@test.com

Contohnya, jika diberikan:

borrow_success

Output-mu harus berupa:

PASS

Dan jika diberikan:

borrow_unavailable

Output-mu harus berupa:

PASS

Dan jika diberikan:

borrow_invalid_user

Output-mu harus berupa:

PASS

Dan jika diberikan:

return_success

Output-mu harus berupa:

PASS

Untuk borrow_success: Buat library, tambahkan buku dan pengguna, pinjam buku, verifikasi tidak ada error, verifikasi buku tidak tersedia, lalu verifikasi pengguna memiliki buku tersebut di list buku yang dipinjam.

Untuk borrow_unavailable: Buat library, tambahkan buku dan pengguna, atur Available buku menjadi false, coba pinjam buku, lalu verifikasi error dikembalikan.

Untuk borrow_invalid_user: Buat library, tambahkan buku saja (tanpa pengguna), coba pinjam menggunakan ID pengguna U001, lalu verifikasi error dikembalikan.

Untuk return_success: Buat library, tambahkan buku dan pengguna, pinjam buku terlebih dahulu, lalu kembalikan buku, verifikasi tidak ada error, verifikasi buku kembali tersedia, lalu verifikasi list buku yang dipinjam oleh pengguna kosong.

Menulis tes memastikan sistem library-mu berfungsi dengan benar dan memberimu keyakinan untuk membuat perubahan tanpa merusak fungsi yang sudah ada!

Coba sendiri

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	testName, _ := reader.ReadString('\n')
	testName = strings.TrimSpace(testName)

	// Data uji standar
	// Buku: ID "B001", Judul "Go Programming", Penulis "John Doe", ISBN "123-456"
	// Pengguna: ID "U001", Nama "Alice", Email "alice@test.com"

	switch testName {
	case "borrow_success":
		// TODO: Uji bahwa peminjaman buku yang tersedia berhasil
		// 1. Buat library, tambahkan buku dan pengguna
		// 2. Pinjam buku tersebut
		// 3. Pastikan: tidak ada error, buku tidak tersedia, buku ada dalam list pengguna
		// Cetak "PASS" jika semua berhasil, atau "FAIL: [reason]" jika ada yang gagal
		fmt.Println("FAIL: not implemented")

	case "borrow_unavailable":
		// TODO: Uji bahwa peminjaman buku yang tidak tersedia menghasilkan error
		// 1. Buat library, tambahkan buku dan pengguna
		// 2. Atur Available pada buku menjadi false
		// 3. Coba pinjam buku tersebut
		// 4. Pastikan error dihasilkan
		fmt.Println("FAIL: not implemented")

	case "borrow_invalid_user":
		// TODO: Uji bahwa meminjam dengan user yang tidak valid menghasilkan error
		// 1. Buat library, tambahkan hanya buku (tanpa user)
		// 2. Coba pinjam dengan ID user "U001"
		// 3. Pastikan error dikembalikan
		fmt.Println("FAIL: not implemented")

	case "return_success":
		// TODO: Uji bahwa mengembalikan buku yang dipinjam berhasil
		// 1. Buat library, tambahkan buku dan pengguna
		// 2. Pinjam bukunya terlebih dahulu
		// 3. Kembalikan bukunya
		// 4. Pastikan: tidak ada error, buku tersedia, list milik user kosong
		fmt.Println("FAIL: not implemented")

	default:
		fmt.Println("FAIL: unknown test")
	}
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online