Menu
Coddy logo textTech

Test ve Entegrasyon

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 104 / 107.

challenge icon

Görev

Kolay

Her şeyin doğru çalıştığını doğrulayan testler yazarak Kütüphane Yönetim Sistemimizi tamamlayalım! Kitapların düzgün bir şekilde ödünç alınabildiğini ve iade edilebildiğini, ayrıca hata durumlarının doğru şekilde ele alındığını garanti eden, kütüphanenizin temel işlevlerini doğrulayan bir test dosyası oluşturacaksınız.

Kodunuzu beş dosya halinde düzenleyeceksiniz:

  • book.go: ID, Title, Author, ISBN ve Available alanlarına sahip Book yapınız. Kitapları kullanılabilir (available) olarak başlatan NewBook yapıcı metodunu (constructor) ekleyin.
  • user.go: ID, Name, Email ve BorrowedBooks alanlarına sahip User yapınız. NewUser yapıcı metodunu ekleyin.
  • library.go: Kitaplar ve kullanıcılar için map'ler içeren Library yapınız; ayrıca NewLibrary, AddBook, AddUser, Borrow ve Return metodlarını ekleyin. Borrow metodu geçersiz kullanıcı, geçersiz kitap veya mevcut olmayan kitap durumlarında hata döndürmelidir. Return metodu ise geçersiz kullanıcı, geçersiz kitap veya ödünç alınmamış kitap durumlarında hata döndürmelidir.
  • library_test.go: Test fonksiyonlarınızı buraya yazacaksınız! Şunları doğrulayan testler oluşturun:
    • TestBorrowSuccess — Mevcut bir kitabın ödünç alınmasının başarılı olduğunu (hata döndürülmediğini), kitabın artık mevcut olmadığını ve kitap ID'sinin kullanıcının ödünç alınanlar listesine eklendiğini doğrulayın.
    • TestBorrowUnavailable — Zaten ödünç alınmış bir kitabı ödünç alma girişiminin hata döndürdüğünü doğrulayın.
    • TestBorrowInvalidUser — Var olmayan bir kullanıcı ID'si ile ödünç alma girişiminin hata döndürdüğünü doğrulayın.
    • TestReturnSuccess — Ödünç alınan bir kitabın iade edilmesinin başarılı olduğunu, kitabın tekrar mevcut hale geldiğini ve kitap ID'sinin kullanıcının ödünç alınanlar listesinden çıkarıldığını doğrulayın.

    Her test, gerekli kitaplar ve kullanıcılarla kendi kütüphanesini kurmalı, işlemi gerçekleştirmeli ve iddialar (assertions) başarısız olduğunda t.Error veya t.Errorf kullanarak sonuçları kontrol etmelidir.

  • main.go: Testlerinizi manuel olarak çalıştırın ve sonuçları raporlayın. Yürütülecek test adını okuyun (borrow_success, borrow_unavailable, borrow_invalid_user veya return_success). Test adına bağlı olarak uygun senaryoyu kurun ve tüm iddialar geçerse PASS, herhangi bir iddia başarısız olursa FAIL: [reason] yazdırın.

Aşağıdaki girdi sağlanacaktır:

  • Bir test adı: borrow_success, borrow_unavailable, borrow_invalid_user veya return_success

Her test için şu standart test verilerini (fixtures) kullanın:

  • Kitap: ID B001, Başlık Go Programming, Yazar John Doe, ISBN 123-456
  • Kullanıcı: ID U001, İsim Alice, E-posta alice@test.com

Örneğin, şu girdi verildiğinde:

borrow_success

Çıktınız şöyle olmalıdır:

PASS

Ve şu girdi verildiğinde:

borrow_unavailable

Çıktınız şöyle olmalıdır:

PASS

Ve şu girdi verildiğinde:

borrow_invalid_user

Çıktınız şöyle olmalıdır:

PASS

Ve şu girdi verildiğinde:

return_success

Çıktınız şöyle olmalıdır:

PASS

borrow_success için: Kütüphane oluşturun, kitap ve kullanıcı ekleyin, kitabı ödünç alın, hata olmadığını doğrulayın, kitabın mevcut olmadığını doğrulayın, kullanıcının ödünç alınanlar listesinde kitabın olduğunu doğrulayın.

borrow_unavailable için: Kütüphane oluşturun, kitap ve kullanıcı ekleyin, kitabın Available değerini false yapın, ödünç almayı deneyin, bir hata döndürüldüğünü doğrulayın.

borrow_invalid_user için: Kütüphane oluşturun, sadece kitabı ekleyin (kullanıcı eklemeyin), U001 kullanıcı ID'si ile ödünç almayı deneyin, bir hata döndürüldüğünü doğrulayın.

return_success için: Kütüphane oluşturun, kitap ve kullanıcı ekleyin, önce kitabı ödünç alın, sonra iade edin, hata olmadığını doğrulayın, kitabın tekrar mevcut olduğunu doğrulayın, kullanıcının ödünç alınanlar listesinin boş olduğunu doğrulayın.

Test yazmak, kütüphane sisteminizin doğru davrandığından emin olmanızı sağlar ve mevcut işlevselliği bozmadan değişiklik yapma konusunda size güven verir!

Kendin dene

package main

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

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

	// Standart test fikstürleri
	// Book: ID "B001", Title "Go Programming", Author "John Doe", ISBN "123-456"
	// User: ID "U001", Name "Alice", Email "alice@test.com"

	switch testName {
	case "borrow_success":
		// TODO: Mevcut bir kitabın ödünç alınmasının başarılı olduğunu test edin
		// 1. Kütüphane oluşturun, kitap ve kullanıcı ekleyin
		// 2. Kitabı ödünç alın
		// 3. Doğrulayın: hata yok, kitap mevcut değil, kullanıcının listesinde kitap var
		// Hepsi geçerse "PASS", herhangi biri başarısız olursa "FAIL: [neden]" yazdırın
		fmt.Println("FAIL: not implemented")

	case "borrow_unavailable":
		// TODO: Mevcut olmayan bir kitabın ödünç alınmasının hata döndürdüğünü test edin
		// 1. Kütüphane oluşturun, kitap ve kullanıcı ekleyin
		// 2. Kitabın Available değerini false olarak ayarlayın
		// 3. Ödünç almayı deneyin
		// 4. Bir hata döndürüldüğünü doğrulayın
		fmt.Println("FAIL: not implemented")

	case "borrow_invalid_user":
		// TODO: Geçersiz kullanıcıyla ödünç almanın hata döndürdüğünü test edin
		// 1. Kütüphane oluşturun, sadece kitabı ekleyin (kullanıcı yok)
		// 2. "U001" kullanıcı ID'si ile ödünç almayı deneyin
		// 3. Bir hata döndürüldüğünü doğrulayın
		fmt.Println("FAIL: not implemented")

	case "return_success":
		// TODO: Ödünç alınan bir kitabın iade edilmesinin başarılı olduğunu test edin
		// 1. Kütüphane oluşturun, kitap ve kullanıcı ekleyin
		// 2. Önce kitabı ödünç alın
		// 3. Kitabı iade edin
		// 4. Doğrulayın: hata yok, kitap mevcut, kullanıcının listesi boş
		fmt.Println("FAIL: not implemented")

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

Nesne Yönelimli Programlama bölümündeki tüm dersler