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! Kütüphanenizin temel işlevlerini doğrulayan bir test dosyası oluşturacaksınız: kitapların düzgün şekilde ödünç alınabilmesini ve iade edilebilmesini, ayrıca hata durumlarının doğru şekilde ele alınmasını sağlayacaksınız.

Kodunuzu beş dosya boyunca düzenleyeceksiniz:

  • book.go: ID, Title, Author, ISBN ve Available alanlarına sahip Book yapınız. Kitapları kullanılabilir olarak başlatan NewBook oluşturucusunu ekleyin.
  • user.go: ID, Name, Email ve BorrowedBooks alanlarına sahip User yapınız. NewUser oluşturucusunu ekleyin.
  • library.go: Kitaplar ve kullanıcılar için eşlemelere sahip Library yapınız; ayrıca NewLibrary, AddBook, AddUser, Borrow ve Return yöntemlerini ekleyin. Borrow yöntemi geçersiz kullanıcı, geçersiz kitap veya kullanılabilir olmayan kitap durumlarında hata döndürmelidir. Return yöntemi geçersiz kullanıcı, geçersiz kitap veya ödünç alınmamış kitap durumlarında hata döndürmelidir.
  • library_test.go: Test işlevlerinizi burada yazacaksınız! Şunları doğrulayan testler oluşturun:
    • TestBorrowSuccess: Kullanılabilir bir kitabın ödünç alınmasının başarılı olduğunu (hata döndürülmediğini), kitabın kullanılabilir olmadığını ve kitap kimliğinin kullanıcının ödünç aldığı kitaplar listesine eklendiğini doğrulayın
    • TestBorrowUnavailable: Daha önce ödünç alınmış bir kitabı ödünç almanın hata döndürdüğünü doğrulayın
    • TestBorrowInvalidUser: Var olmayan bir kullanıcı kimliğiyle ödünç alma işleminin hata döndürdüğünü doğrulayın
    • TestReturnSuccess: Ödünç alınmış bir kitabın iade edilmesinin başarılı olduğunu, kitabın yeniden kullanılabilir hâle geldiğini ve kitap kimliğinin kullanıcının ödünç aldığı kitaplar listesinden kaldırıldığını doğrulayın

    Her test, gerekli kitap ve kullanıcılarla kendi kütüphanesini oluşturmalı, işlemi gerçekleştirmeli ve doğrulamalar başarısız olduğunda sonuçları t.Error veya t.Errorf kullanarak kontrol etmelidir.

  • main.go: Testlerinizi manuel olarak çalıştırın ve sonuçları bildirin. Çalıştırılacak test adını okuyun (borrow_success, borrow_unavailable, borrow_invalid_user veya return_success). Test adına göre uygun senaryoyu oluşturun ve tüm doğrulamalar başarılı olursa PASS, herhangi bir doğrulama 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 kullanın:

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

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

borrow_success

Çıktınız şu olmalıdır:

PASS

Ve şu girdi verildiğinde:

borrow_unavailable

Çıktınız şu olmalıdır:

PASS

Ve şu girdi verildiğinde:

borrow_invalid_user

Çıktınız şu olmalıdır:

PASS

Ve şu girdi verildiğinde:

return_success

Çıktınız şu olmalıdır:

PASS

borrow_success için: Kütüphaneyi oluşturun, kitap ve kullanıcı ekleyin, kitabı ödünç alın, hata olmadığını doğrulayın, kitabın kullanılabilir olmadığını doğrulayın ve kullanıcının ödünç aldığı kitaplar listesinde kitabın bulunduğunu doğrulayın.

borrow_unavailable için: Kütüphaneyi oluşturun, kitap ve kullanıcı ekleyin, kitabın Available değerini false olarak ayarlayın, ödünç almaya çalışın ve bir hata döndürüldüğünü doğrulayın.

borrow_invalid_user için: Kütüphaneyi oluşturun, yalnızca kitabı ekleyin (kullanıcı eklemeyin), U001 kullanıcı kimliğiyle ödünç almaya çalışın ve bir hata döndürüldüğünü doğrulayın.

return_success için: Kütüphaneyi oluşturun, kitap ve kullanıcı ekleyin, önce kitabı ödünç alın, ardından iade edin, hata olmadığını doğrulayın, kitabın yeniden kullanılabilir olduğunu doğrulayın ve kullanıcının ödünç aldığı kitaplar listesinin boş olduğunu doğrulayın.

Test yazmak, kütüphane sisteminizin doğru davranmasını sağlar ve mevcut işlevselliği bozmadan değişiklikler yapabileceğiniz 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
	// Kitap: ID "B001", Başlık "Go Programming", Yazar "John Doe", ISBN "123-456"
	// Kullanıcı: ID "U001", Ad "Alice", E-posta "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 et
		// 1. Kütüphane oluştur, kitap ve kullanıcı ekle
		// 2. Kitabı ödünç al
		// 3. Doğrula: hata yok, kitap müsait değil, kullanıcının listesinde kitap var
		// Tümü geçerse "PASS" yazdır, herhangi biri başarısız olursa "FAIL: [reason]" yazdır
		fmt.Println("FAIL: not implemented")

	case "borrow_unavailable":
		// TODO: Müsait olmayan kitabın ödünç alınmasının hata döndürdüğünü test et
		// 1. Kütüphane oluştur, kitap ve kullanıcı ekle
		// 2. Kitabın Available değerini false yap
		// 3. Ödünç almayı dene
		// 4. Bir hata döndürüldüğünü doğrula
		fmt.Println("FAIL: not implemented")

	case "borrow_invalid_user":
		// TODO: Geçersiz kullanıcı ile ödünç almanın hata döndürdüğünü test et
		// 1. Kütüphane oluştur, yalnızca kitabı ekle (kullanıcı yok)
		// 2. Kullanıcı ID'si "U001" ile ödünç almayı dene
		// 3. Bir hata döndürüldüğünü doğrula
		fmt.Println("FAIL: not implemented")

	case "return_success":
		// TODO: Ödünç alınmış bir kitabın iadesinin başarılı olduğunu test et
		// 1. Kütüphane oluştur, kitap ve kullanıcı ekle
		// 2. Önce kitabı ödünç al
		// 3. Kitabı iade et
		// 4. Doğrula: hata yok, kitap müsait, 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

Kendi başına pratik yap: Online Go derleyicisi