it-praxisportal/courses/javascript/06_klassen_und_oop/test_aufgabe.js

103 lines
4.4 KiB
JavaScript

// 🧪 JS 06: Testsuite für Klassen, OOP, Vererbung & Methoden
if (typeof assert === "undefined") {
var assert = require("assert");
}
function pruefeFehler(fn, beschreibung) {
let threw = false;
try {
fn();
} catch (e) {
threw = true;
}
assert.ok(threw, `${beschreibung} sollte einen Fehler werfen!`);
}
// ==========================================
// 1. Tests für Bankkonto
// ==========================================
const konto1 = new Bankkonto("Alice Schmidt");
assert.strictEqual(konto1.inhaber, "Alice Schmidt", "Bankkonto sollte korrekten Inhaber besitzen");
assert.strictEqual(konto1.saldo, 0, "Standard-Startsaldo sollte 0 sein");
const konto2 = new Bankkonto("Bob Berger", 250);
assert.strictEqual(konto2.saldo, 250, "Bankkonto sollte initialen Saldo von 250 haben");
// Einzahlen
const nachEinzahlung = konto2.einzahlen(150);
assert.strictEqual(nachEinzahlung, 400, "einzahlen(150) sollte neuen Saldo 400 zurückgeben");
assert.strictEqual(konto2.saldo, 400, "konto.saldo sollte nach Einzahlung 400 betragen");
pruefeFehler(() => konto2.einzahlen(0), "einzahlen(0)");
pruefeFehler(() => konto2.einzahlen(-50), "einzahlen(-50)");
// Abheben
const nachAbhebung = konto2.abheben(100);
assert.strictEqual(nachAbhebung, 300, "abheben(100) sollte neuen Saldo 300 zurückgeben");
assert.strictEqual(konto2.saldo, 300, "konto.saldo sollte nach Abhebung 300 betragen");
pruefeFehler(() => konto2.abheben(0), "abheben(0)");
pruefeFehler(() => konto2.abheben(-20), "abheben(-20)");
pruefeFehler(() => konto2.abheben(999), "abheben(999) bei Saldo 300");
// ==========================================
// 2. Tests für Fahrzeug
// ==========================================
const fahrzeug = new Fahrzeug("Volkswagen", "Golf 8", 2021);
assert.strictEqual(fahrzeug.marke, "Volkswagen", "Fahrzeug sollte Marke 'Volkswagen' besitzen");
assert.strictEqual(fahrzeug.modell, "Golf 8", "Fahrzeug sollte Modell 'Golf 8' besitzen");
assert.strictEqual(fahrzeug.baujahr, 2021, "Fahrzeug sollte Baujahr 2021 besitzen");
assert.strictEqual(
fahrzeug.beschreibung(),
"Volkswagen Golf 8 (2021)",
"Fahrzeug.beschreibung() sollte 'Marke Modell (Baujahr)' zurückgeben"
);
// ==========================================
// 3. Tests für ElektroAuto (Vererbung & Methoden)
// ==========================================
const eAuto = new ElektroAuto("Hyundai", "Ioniq 5", 2023, 77.4);
assert.ok(eAuto instanceof ElektroAuto, "eAuto sollte Instanz von ElektroAuto sein");
assert.ok(eAuto instanceof Fahrzeug, "eAuto sollte via Vererbung Instanz von Fahrzeug sein");
assert.strictEqual(eAuto.marke, "Hyundai", "ElektroAuto erbt marke");
assert.strictEqual(eAuto.modell, "Ioniq 5", "ElektroAuto erbt modell");
assert.strictEqual(eAuto.baujahr, 2023, "ElektroAuto erbt baujahr");
assert.strictEqual(eAuto.batterieKapazitaet, 77.4, "ElektroAuto besitzt batterieKapazitaet");
assert.strictEqual(
eAuto.beschreibung(),
"Hyundai Ioniq 5 (2023) [Elektro: 77.4 kWh]",
"ElektroAuto.beschreibung() sollte erweiterte Beschreibung liefern"
);
// Reichweitenberechnung: (77.4 kWh / 15.48 kWh/100km) * 100 = 500 km
const reichweite = eAuto.reichweiteBerechnen(15.48);
assert.strictEqual(Math.round(reichweite), 500, "reichweiteBerechnen(15.48) sollte 500 km ergeben");
pruefeFehler(() => eAuto.reichweiteBerechnen(0), "reichweiteBerechnen(0)");
pruefeFehler(() => eAuto.reichweiteBerechnen(-10), "reichweiteBerechnen(-10)");
// ==========================================
// 4. Tests für Statische Fabrikmethode
// ==========================================
const standardTesla = ElektroAuto.erstelleStandardTesla();
assert.ok(standardTesla instanceof ElektroAuto, "erstelleStandardTesla() muss ein ElektroAuto zurückgeben");
assert.strictEqual(standardTesla.marke, "Tesla", "Tesla Marke sollte 'Tesla' sein");
assert.strictEqual(standardTesla.modell, "Model 3", "Tesla Modell sollte 'Model 3' sein");
assert.strictEqual(standardTesla.baujahr, 2024, "Tesla Baujahr sollte 2024 sein");
assert.strictEqual(standardTesla.batterieKapazitaet, 75, "Tesla Batteriekapazität sollte 75 sein");
assert.strictEqual(
standardTesla.beschreibung(),
"Tesla Model 3 (2024) [Elektro: 75 kWh]",
"Tesla beschreibung() prüfen"
);
assert.strictEqual(
standardTesla.reichweiteBerechnen(15),
500,
"Tesla Reichweite bei 15 kWh/100km sollte (75/15)*100 = 500 km sein"
);
console.log("✅ Alle Tests in JS 06 (Klassen & OOP) erfolgreich bestanden!");