# Testklasse schreiben....!



## coldstone (21. Nov 2010)

Hallo liebe freunde. Habe hier mal folgende Aufgabe.

Und zwar der Quellcode:


```
001 import java.util.Calendar; // Klasse Calendar aus dem paket util mit Methoden
002                            // zur Bestimmung von Kalender-Funktionen, 
003                            // u.a. Bestimmung des aktuellen Jahres 
004
005 /** EinfachesAuto.java
006  *  Klasse zur Beschreibung eines Autos.
007  *   @ author Ihr Name, e-Mail-Adresse
008  *   Datum
009  **/
010 public class EinfachesAuto {
011     // Attribute
012     private String besitzer;
013     private String autotyp;
014     private String farbe;
015     private int erstzulassung;
016     private int leistung;
017     private int kmStand;
018
019     // Konstruktor
020     public EinfachesAuto(String besitzer, String autotyp, String farbe,
021                          int erstzulassung, int leistung, int kmStand) {
022
023         this.besitzer = besitzer;
024         this.autotyp = autotyp;
025         this.farbe = farbe;
026         this.erstzulassung = erstzulassung;
027         this.leistung = leistung;
028         this.kmStand = kmStand;
029     }
030
031     // Methoden
032     /** Berechnung des Alters des Autos aufgrund des aktuellen 
033      *  Kalenderjahrs und der Erstzulassung.
034      *  @param ohne
035      *  @return int alter
036      */
037     public int alter() {
038        // Ermittlung des aktuellen Jahres 
039         Calendar aktuellerKalender = Calendar.getInstance();
040         int aktuellesJahr = aktuellerKalender.get(Calendar.YEAR);
041         return aktuellesJahr - this.erstzulassung;
042     }
043
044     /** Einfache Ausgabe auf den Bildschirm.
045      *  @param ohne
046      *  @return void
047      */
048     public void meldung() {
049         System.out.print ("Hier gruesst das "+ this.farbe );
050         System.out.println (" Auto von " + this.besitzer);
051     }
052 }
```

Aufgabe:

Schreiben Sie eine Testklasse AutoTest.java, mit der Sie EinfachesAuto.class testen, in dem Sie drei Objekte erzeugen und deren Methoden aktivieren.


Wie ist das mit der Testklasse gemeint? Ich kann mir nicht vorstellen wie sowas aussehen soll!


----------



## XHelp (21. Nov 2010)

Entweder ihr seid gerade bei JUnit (o.ä.) und ihr müsst eben Tests erstellen, oder:
Ihr seit noch recht am Anfang und müsst einfach nur eine Klasse schreiben, die genau das tut, was da steht. Kannst ja dann in der Main 3 Objekte erstellen und lustig die Methoden aufrufen.


----------



## coldstone (21. Nov 2010)

Ist das denn so richtig:


```
/** AutoTest.java
* Klasse AutoTest.java
* @ author Ihr Name, e-Mail-Adresse
* Datum
*/

public class AutoTest {

	public static void main(String[] args) {
		EinfachesAuto erstesAuto = new EinfachesAuto("Klaus","Passat","blau",2002,175,25600);
		EinfachesAuto zweitesAuto = new EinfachesAuto("Frank","Mercedes","schwarz",2000,116,35600);
		EinfachesAuto drittesAuto = new EinfachesAuto("Peter","BMW","Rot",2008,225,1500);
		System.out.println("Name des Besitzers: " + erstesAuto.besitzer, "Autotyp: " + erstesAuto.autotyp, "Farbe: " + erstesAuto.farbe, "Erstzulassung : " + erstesAuto.erstzulassung, "Leistung : " + erstesAuto.leistung, "Kilometerstand: " + erstesAuto.kmStand);
		System.out.println("Name des Besitzers: " + zweitesAuto.besitzer, "Autotyp: " + zweitesAuto.autotyp, "Farbe: " + zweitesAuto.farbe, "Erstzulassung : " + zweitesAuto.erstzulassung, "Leistung : " + zweitesAuto.leistung, "Kilometerstand: " + zweitesAuto.kmStand);
		System.out.println("Name des Besitzers: " + drittesAuto.besitzer, "Autotyp: " + drittesAuto.autotyp, "Farbe: " + drittesAuto.farbe, "Erstzulassung : " + drittesAuto.erstzulassung, "Leistung : " + drittesAuto.leistung, "Kilometerstand: " + drittesAuto.kmStand);
	}
}
```


----------



## XHelp (21. Nov 2010)

Wie gesagt, wenn es einfach "irgendeine Klasse" sein soll, dann ja. Zumindestmal von der Aufgabenstellung.
Du könntest ja noch prüfen ob die Farbe vom 1. Auto auch wirklich blau ist, oder ob die Erstzulassung von 3. Auto 2008 ist etc...


----------



## coldstone (21. Nov 2010)

Muss die Klasse AutoTest und EinfachesAuto in einer java datei existieren damit ich Sie compilieren kann? oder kann ich AutoTest alleine kompilieren? Zumindest geht das bei mir nicht.


----------



## XHelp (21. Nov 2010)

Nein, müssen die nicht. Was genau machst du denn?


----------



## coldstone (21. Nov 2010)

Möchte unter eingabeaufforderung kompilieren, bekomme aber diese fehlermeldung:



```
AutoTest.java:10: cannot find symbol
symbol  : class EinfachesAuto
location: class AutoTest
                EinfachesAuto erstesAuto = new EinfachesAuto("Klaus","Passat","b
lau",2002,175,25600);
                ^
AutoTest.java:10: cannot find symbol
symbol  : class EinfachesAuto
location: class AutoTest
                EinfachesAuto erstesAuto = new EinfachesAuto("Klaus","Passat","b
lau",2002,175,25600);
                                               ^
AutoTest.java:11: cannot find symbol
symbol  : class EinfachesAuto
location: class AutoTest
                EinfachesAuto zweitesAuto = new EinfachesAuto("Frank","Mercedes"
,"schwarz",2000,116,35600);
                ^
AutoTest.java:11: cannot find symbol
symbol  : class EinfachesAuto
location: class AutoTest
                EinfachesAuto zweitesAuto = new EinfachesAuto("Frank","Mercedes"
,"schwarz",2000,116,35600);
                                                ^
AutoTest.java:12: cannot find symbol
symbol  : class EinfachesAuto
location: class AutoTest
                EinfachesAuto drittesAuto = new EinfachesAuto("Peter","BMW","Rot
",2008,225,1500);
                ^
AutoTest.java:12: cannot find symbol
symbol  : class EinfachesAuto
location: class AutoTest
                EinfachesAuto drittesAuto = new EinfachesAuto("Peter","BMW","Rot
",2008,225,1500);
                                                ^
AutoTest.java:13: cannot find symbol
symbol  : method println(java.lang.String,java.lang.String,java.lang.String,java
.lang.String,java.lang.String,java.lang.String)
location: class java.io.PrintStream
                System.out.println("Name des Besitzers: " + erstesAuto.besitzer,
 "Autotyp: " + erstesAuto.autotyp, "Farbe: " + erstesAuto.farbe, "Erstzulassung
: " + erstesAuto.erstzulassung, "Leistung : " + erstesAuto.leistung, "Kilometers
tand: " + erstesAuto.kmStand);
                          ^
AutoTest.java:14: cannot find symbol
symbol  : method println(java.lang.String,java.lang.String,java.lang.String,java
.lang.String,java.lang.String,java.lang.String)
location: class java.io.PrintStream
                System.out.println("Name des Besitzers: " + zweitesAuto.besitzer
, "Autotyp: " + zweitesAuto.autotyp, "Farbe: " + zweitesAuto.farbe, "Erstzulassu
ng : " + zweitesAuto.erstzulassung, "Leistung : " + zweitesAuto.leistung, "Kilom
eterstand: " + zweitesAuto.kmStand);
                          ^
AutoTest.java:15: cannot find symbol
symbol  : method println(java.lang.String,java.lang.String,java.lang.String,java
.lang.String,java.lang.String,java.lang.String)
location: class java.io.PrintStream
                System.out.println("Name des Besitzers: " + drittesAuto.besitzer
, "Autotyp: " + drittesAuto.autotyp, "Farbe: " + drittesAuto.farbe, "Erstzulassu
ng : " + drittesAuto.erstzulassung, "Leistung : " + drittesAuto.leistung, "Kilom
eterstand: " + drittesAuto.kmStand);
                          ^
```


----------



## XHelp (21. Nov 2010)

Also dein Sysout ist falsch, da muss kein Komma hin, sondern ein Plus.
Aber was genau machst du denn:
1. EinfachesAuto.java geschrieben
2. AutoTest.java im selben verzeichnis geschrieben.
3. ab diesem Punkt *genauer*...


----------



## coldstone (21. Nov 2010)

Wie die Aufgabenstellung es sagt.

"Schreiben Sie eine Testklasse AutoTest.java, mit der Sie EinfachesAuto.class testen, in dem Sie drei Objekte erzeugen und deren Methoden aktivieren."

Mit der Klasse AutoTest habe ich 3 objekte erzeugt. (erstesAuto, zweitesAuto, drittesAuto). Ist denn der Syntax falsch?
Meinst du dies ist falsch:

"  System.out.println("Name des Besitzers: " + erstesAuto.besitzer, "Autotyp: " + erstesAuto.autotyp, "Farbe: " + erstesAuto.farbe, "Erstzulassung : " + erstesAuto.erstzulassung, "Leistung : " + erstesAuto.leistung, "Kilometerstand: " + erstesAuto.kmStand);" ???


----------



## XHelp (21. Nov 2010)

Ja, ist es. entweder musst du das in mehrere Sysouts packen, oder:

```
System.out.println("Name des Besitzers: " + erstesAuto.besitzer + //statt ,
```

Wie versuchst du zu kompilieren? was gibst du ein, in welcher Reihenfolge etc...


----------



## coldstone (21. Nov 2010)

Müsste es denn dann so aussehen??


```
System.out.println("Name des Besitzers: " + erstesAuto.besitzer + "Autotyp: " + erstesAuto.autotyp + "Farbe: " + erstesAuto.farbe + "Erstzulassung : " + erstesAuto.erstzulassung + "Leistung : " + erstesAuto.leistung + "Kilometerstand: " + erstesAuto.kmStand);
```

Kompilieren mache ich über die MSDOS Eingabeaufforderung. 
 mit dem Befehl "javac AutoTest.java"


----------



## XHelp (21. Nov 2010)

Mir fehlt gerade ein, dass du gar nicht auf besitzer etc. gar nicht zugreifen kannst, weil die private sind. Du musst die Methoden aufrufen.
Befindet sich denn EinfachesAuto.java im selben Verzeichnis?


----------



## coldstone (21. Nov 2010)

Wie rufe ich denn die Methoden auf??? Geht das irgendwie mit dem "method " Befehl??
Und ja sie sind im selben verzeichnis???


----------



## XHelp (22. Nov 2010)

```
instanzDerKlasse.nameDerMethode()
```
 ?
Und wenn du zuerst deine Autoklasse kompilierst?


----------



## coldstone (22. Nov 2010)

EinfachesAuto.java habe ich kompiliert.

Habe jetzt EinfachesAuto.java und EinfachesAuto.class und AutoTest.java.

Wenn ich jetzt AutoTest kompiliere bekomme ich diese fehlermeldung.

```
AutoTest.java:15: kmStand has private access in EinfachesAuto
        System.out.println("Name des Besitzers: " + drittesAuto.besitzer + "Auto
typ: " + drittesAuto.autotyp + "Farbe: " + drittesAuto.farbe + "Erstzulassung :
" + drittesAuto.erstzulassung + "Leistung : " + drittesAuto.leistung + "Kilomete
rstand: " + drittesAuto.kmStand);
```

Hängt irgendwie damit zusammen das Sie wirklich den Status Private haben. Nur wie kann ich diese, in die Klasse AutoTest einbinden?


----------



## XHelp (22. Nov 2010)

Hab ich doch oben schon geschrieben, dass es nicht geht.


----------



## coldstone (22. Nov 2010)

Ja abr es muss doch irgendwie eine lösung geben???
Oder einfach private weg machen!??


----------



## XHelp (22. Nov 2010)

In der Aufgabe steht doch was von "Methoden"... warum rufst du nicht einfach die Methoden auf? Du hast 2 zur Auswahl


----------



## coldstone (22. Nov 2010)

Wie rufe ich denn die Methoden auf???


----------



## JohannisderKaeufer (22. Nov 2010)

z.B.

erstesAuto.meldung();

Es kommt auf die Runden Klammern an.


----------



## coldstone (22. Nov 2010)

Liebe freunde ich weiss ihr meint es nur gut mit kurzen knappen anstössen, damit mann selber auf die lösung kommt. Aber ich bin wirklich ein Grünschnabel was java angeht und weis wirklich nicht was ich damit anfangen soll:
"z.B.

erstesAuto.meldung();

Es kommt auf die Runden Klammern an. "

Wenn Ihr das ein bischen detaillerte erklären könntet währe ich sehr, sehr dankbar.
Ich weis wirklich eure Mühe um diese Zeit zu schätzen. 
:roll:


----------



## XHelp (22. Nov 2010)

Da gibt es nichts zu erklären. Du kopierst das in deine Testklasse statt den Sysouts.


----------



## coldstone (22. Nov 2010)

etwa so:


```
public class AutoTest {
 
    public static void main(String[] args) {
        EinfachesAuto erstesAuto = new EinfachesAuto("Klaus","Passat","blau",2002,175,25600);
        EinfachesAuto zweitesAuto = new EinfachesAuto("Frank","Mercedes","schwarz",2000,116,35600);
        EinfachesAuto drittesAuto = new EinfachesAuto("Peter","BMW","Rot",2008,225,1500);
        erstesAuto.meldung("Name des Besitzers: " + erstesAuto.besitzer + "Autotyp: " + erstesAuto.autotyp + "Farbe: " + erstesAuto.farbe + "Erstzulassung : " + erstesAuto.erstzulassung + "Leistung : " + erstesAuto.leistung + "Kilometerstand: " + erstesAuto.kmStand);
        zweitesAuto.meldung("Name des Besitzers: " + zweitesAuto.besitzer + "Autotyp: " + zweitesAuto.autotyp + "Farbe: " + zweitesAuto.farbe + "Erstzulassung : " + zweitesAuto.erstzulassung + "Leistung : " + zweitesAuto.leistung + "Kilometerstand: " + zweitesAuto.kmStand);
        drittesAuto.meldung("Name des Besitzers: " + drittesAuto.besitzer + "Autotyp: " + drittesAuto.autotyp + "Farbe: " + drittesAuto.farbe + "Erstzulassung : " + drittesAuto.erstzulassung + "Leistung : " + drittesAuto.leistung + "Kilometerstand: " + drittesAuto.kmStand);
    }
}
```


----------



## XHelp (22. Nov 2010)

nö?
Lösch die letzten 3 Zeilen und schreib dahin, was dir JohannisderKaeufer genannt hat.


----------



## coldstone (22. Nov 2010)

ok jetzt hat auch das kompilieren geklappt. Was bewirkt aber diese anweisung?

Bewirkt dies jetzt, das die Klasse AutoTest die attribute aus der klasse EinfachesAuto übernimmt?


----------



## XHelp (22. Nov 2010)

Nein. Ein Aufruf der Methode bewirkt, dass die Methode aufgerufen wird. In eurer Klasse heißt das Vorgehen wohl "Methode aktivieren"...


----------



## coldstone (22. Nov 2010)

ok und welche anweisung bewirkt das die attribute in EinfachesAuto die als Private deklariert sind unter AutoTest auch übergeben werden?


----------



## XHelp (22. Nov 2010)

Was?
Wenn du an die Werte willst, dann musst du getter dafür schreiben.


----------



## coldstone (22. Nov 2010)

"Schreiben Sie eine Testklasse AutoTest.java, mit der Sie EinfachesAuto.class testen, in dem Sie drei Objekte erzeugen und deren Methoden aktivieren."

Wenn ich wüsste was mit "Methoden aktivieren" gemeint ist!!???

Wie kann ich denn die daten ausgeben lassen?

Mit "public void alleDatenAusgeben() {
System.out.println ("Das erste Auto ist im Besitz von" + this.besitzer);
System.out.println ("Das erste Auto istein" + this.autotyp);
.
.
.
}"

Nur wie kann ich den unterscheiden zwischen erstesAuto, zweites Auto und drittesAuto???


----------



## XHelp (22. Nov 2010)

Nein, da schreibst du rein: "DIESES Auto ist im Besitzt.....". Für jedes Auto erscheint eine andere Ausgabe.
Mit "Methoden aktivieren" ist wohl "Methoden aufrufen" gemeint.


----------



## coldstone (22. Nov 2010)

ok wenn ich jedes Auto einzeln ausgeben lassen muss, wie kann ich Ihm denn sagen welches Auto er ausgibt?

oder reicht es wenn ich schreibe:

"public void alleDatenAusgeben() {
System.out.println ("Das erste Auto ist im Besitz von" + this.besitzer);"


Und er unterscheidet automatisch zwischen erstesAuto, zweitesAuto und drittesAuto und schreibt mir diese getrennt auf?


----------



## XHelp (22. Nov 2010)

Hast du schon mal versucht die melden-Methode überhaupt auszuführen?
Dir wurde doch gesagt: 
	
	
	
	





```
erstesAuto.melden()
```
... was könntest du denn ändern, damit die Methode bei dem zweiten Auto ausgeführt wird... Ein Tipp: *erstes*Auto.melden()


----------



## coldstone (22. Nov 2010)

Ich habs jetzt so gemacht:


```
public class AutoTest {
 
    public static void main(String[] args) {
        EinfachesAuto erstesAuto = new EinfachesAuto("Klaus","Passat","blau",2002,175,25600);
        EinfachesAuto zweitesAuto = new EinfachesAuto("Frank","Mercedes","schwarz",2000,116,35600);
        EinfachesAuto drittesAuto = new EinfachesAuto("Peter","BMW","Rot",2008,225,1500);
        erstesAuto.meldung();
        zweitesAuto.meldung();
        drittesAuto.meldung();
    }
}
```


----------



## coldstone (22. Nov 2010)

Kannst du mir hierbei auch helfen?
AUfgabe:
Schreibt die Werte der Attribute in übersichtlicher Form auf den Bildschirm


```
public void alleDatenAusgeben() {
System.out.println ("Das erste Auto ist im Besitz von" + this.besitzer); 
System.out.println ("Das erste Auto ist ein" + this.autotyp); 
System.out.println ("Es hat die Farbe" + this.farbe); 
.
.
.
System.out.println ("Das zweite Auto ist im Besitz von" + this.besitzer); 
System.out.println ("Das zweite Auto ist ein" + this.autotyp); 
System.out.println ("Es hat die Farbe" + this.farbe);
 .
 .
 .
 }
```

Ist dies korrekt? Nur wie unterscheidet er denn  welches Auto ich meine? erstes, zweites oder drittes?


----------



## XHelp (22. Nov 2010)

Gar nicht. du kannst höhstens machen:

```
System.out.println("Erstes Auto: ");
erstesAuto.alleDatenAusgeben();
System.out.println("Zweites Auto: ");
zweitesAuto.alleDatenAusgeben();
```
Aber ich glaube ich sage dir schon zum 3. mal, dass die sich innerhalb der Klasse nicht unterschieden...


----------



## coldstone (22. Nov 2010)

Wie meinst du das mit, "das die siech nicht unterscheiden???"

Ist das denn so korrekt?


```
public void alleDatenAusgeben() {
    	 System.out.println("Erstes Auto: ");
    	 ErweitertesAuto erstesAuto = null;
		erstesAuto.alleDatenAusgeben();
    	 System.out.println("Zweites Auto: ");
    	 ErweitertesAuto zweitesAuto = null;
		zweitesAuto.alleDatenAusgeben();
    	 System.out.println("Drittes Auto: ");
    	 ErweitertesAuto drittesAuto = null;
		drittesAuto.alleDatenAusgeben();
     }
```


----------



## XHelp (22. Nov 2010)

Innerhalb deines Auto-Objektes siehst du nur dieses Auto-Objekt, nicht erstes, zweites, eintausendstes Auto, sondern EIN AUTO.


----------

