TestTreiber Zugriff auf Klasseninstanzmethoden mit this

Linx

Mitglied
Hi,

ich hab ein Problem mit einer Aufgabenstellung, deren Lösung lächerlich einfach sein muss, aber ich komm nicht drauf.

Ich habe ein Package in welchem ich eine Klasse habe und den Testtreiber.

Die Klasse:
Java:
package de.example.praemiensparvertrag;

public class PraemienSparVertrag {
	//Variablen
	public TestPraemienSparVertrag ps;
	public int monat;
	private double geld;
	private double kapital;
	private int praemieGebucht;
	private int zinsenGebucht;
	private int rateGebucht;
	
	//Konstruktor
	public PraemienSparVertrag(double einzahlung){
		this.geld = einzahlung;
		this.kapital = 0.0;
		this.praemieGebucht = 0;
		this.zinsenGebucht = 0;
		this.rateGebucht = 0;
		
	}
	
	//Methoden
	public double getKapital(){
		return this.kapital;
	}
	public boolean bucheZinsen(){
		
		return true;
	} 
	public boolean buchePraemie(){
		
		return true;
	}
	public boolean bucheRate(){
		
		return true;
	}
}

Der Treiber:
Java:
package de.example.praemiensparvertrag;

import junit.framework.*;
import java.util.logging.*;

public class TestPraemienSparVertrag extends TestCase
{
    private static Logger logger=Logger.getAnonymousLogger();
    
    public void teste()
    {
        this.logger.info("Start: Tests für PraemienSparVertrag");
        PraemienSparVertrag ps=new PraemienSparVertrag(100.0);
        assertEquals(0.0,this.ps.getKapital());
        assertFalse(this.ps.bucheZinsen()); 
        assertFalse(this.ps.buchePraemie());
        this.logger.info("Test Konstruktor erfolgreich");
        assertFalse(this.ps.bucheRate(0));
        assertFalse(this.ps.bucheRate(13));
        assertFalse(this.ps.bucheRate(2));
        for(int monat=1;monat<=12;monat++) 
        {
            assertTrue(this.ps.bucheRate(monat));
            assertFalse(this.ps.bucheRate(monat)); 
            assertEquals(monat*100.0,this.ps.getKapital());
            if(monat<12)
            {
                assertFalse(this.ps.bucheZinsen()); 
                assertFalse(this.ps.buchePraemie());
            }
        }
        assertEquals(1200.0,this.ps.getKapital());
        this.logger.info("Test bucheRate erfolgreich");
        assertFalse(this.ps.buchePraemie());
        assertTrue(this.ps.bucheZinsen());
        assertFalse(this.ps.bucheZinsen());
        assertEquals(1218.0,this.ps.getKapital());
        this.logger.info("Test bucheZinsen erfolgreich");
        assertTrue(this.ps.buchePraemie());
        assertFalse(this.ps.buchePraemie());
        assertEquals(1260.63,this.ps.getKapital());
        this.logger.info("Test buchePraemie erfolgreich");
        this.logger.info("Tests für PraemienSparVertrag erfolgreich abgeschlossen");
    }
}

Der TestTreiber ist fehlerfrei und darf nicht verändert werden.
Ich weis nicht wie und was ich verändern soll, dass der Aufruf der Methoden mit this.ps.methode() funktioniert?
Nachgeschlagen hab ich im Java ist auch eine Insel Wälzer nach Generics und innere Klassen aber ich komm nicht drauf, es ist zum verrückt werden!

Danke für Hilfe ich komm einfach nicht drauf...

Grüße
 
Zuletzt bearbeitet:

Murray

Top Contributor
Der TestTreiber ist fehlerfrei
Ich behaupte mal, dass das nicht stimmt - im Testtreiber ist ps nunmal eine lokale Variable in der Methode teste; eine Member-Variable dieses Namens gibt es nicht, so dass ein mit this qualifizierter Zugriff nicht funktionieren kann. Der Fehler wird sich ohne Änderung des Testtreibers nicht beheben lassen. Eigentlich wäre die Lösung aber recht einfach: in Testreiber.teste() muss this.ps konsequent durch ps ersetzt werden.
 

Linx

Mitglied
Hallo,

ja, nur ist das mit this.ps absichtlich so gewählt.

Der Testtreiber ist zu 100% korrekt, es muss eine Lösung geben ohne diesen zu ändern. Alles andere ist erlaubt.

Was meinst du wie ich mir die Zähne dran ausgebissen habe. Stunden und so viele Nerven verloren das ich mich in letzter Instanz an eine Online-Community wenden muss.

Ich hoffe so sehr auf eine Lösung, einen Ansatz, eine Vermutung...

Besten Dank.
 

Murray

Top Contributor
Der Testtreiber ist zu 100% korrekt, es muss eine Lösung geben ohne diesen zu ändern. Alles andere ist erlaubt.
Wenn alles andere erlaubt ist, dann kannst Du ja ein Member ps in die Basisklasse TestCase einbauen oder aber ein Instrumentation-Modul schreiben, welches das Member ps im Bytecode des Testtreibers beim Laden der Klasse ergänzt. So richtig im Sinne der Aufgabensetllung werden aber wohl beide Lösungen nicht sein.
 

Linx

Mitglied
Das hört sich schonmal sehr gut an obwohl ich von beiden deiner Vorschläge ich noch nur die hälfte verstehe ;)

this.ps im Testtreiber, ist extra eingebaut. Sozusagen für die richtigen Pro's die für sowas kniffliges nen Lösungsweg finden.

Problem seh ich darin, dass wenn ich das Projekt auf nem anderen Computer in einer Eclipse kompiliere, ich die Basisklasse von TestCase auch ändern müsste. Also würde die Option schon wegfallen.

Instrumentation-Modul, ist das was für Java EE? Quasi sowas wie eine Extension?

Was ich noch erwähnen möchte, die Lösung kann auch ganz simpel sein, da die Aufgabe für Fachinformatiker Anwendungsentwicklung der Jahrgangsstufe 2 ist und diese noch kein Interface oder Vererbung kennen...obwohl es etwas mit Vererbung zu tun haben könnte......

Könnte man in Klasse praemiensparvertrag beim Aufruf im Testtreiber zum Bestandteil des Testtreibers machen und im Konstruktor eine Variable ps belegen?
Wäre meine Idee, nur wüsste ich nicht wie man eine Klasse bei ihrem Aufruf zum Teil der Klasse wird, welche ihren Konstruktor aufruft?


@ARadauer: Ja, aber es ist wie gesagt kein Fehler, es ist absichtlich eingebaut.
 

Murray

Top Contributor
Das hört sich schonmal sehr gut an obwohl ich von beiden deiner Vorschläge ich noch nur die hälfte verstehe ;)
Ganz ernst gemeint war beides nicht - dass man die Basisklasse nicht so gut verändern kann, hast Du ja schon selbst erkannt. Und ohne Fachinformatikern im 2. Jahr zu nahen treten zu wollen - Byte-Code-Instrumentation ist wohl weit jenseits des Curriculums.
 

Marco13

Top Contributor
Bin nicht 100% sicher, aber wenn man im gleichen Package(!) eine Klasse "TestCase" anlegt, sucht er dort glaub' ich zuerst, d.h. er würde dann nicht vom JUnit-TestCase, sondern vom eigenen erben...
 

ARadauer

Top Contributor
Bin nicht 100% sicher, aber wenn man im gleichen Package(!) eine Klasse "TestCase" anlegt, sucht er dort glaub' ich zuerst, d.h. er würde dann nicht vom JUnit-TestCase, sondern vom eigenen erben...
wenn junit.framework.*; schon importiert ist? kann ich mir nicht vorstellen.

Man könnte das package junit.framework erstellen un dort eine TestCase erstellen..

das ist aber schräger Mist, sowas sollte man keine Anfänger beibringen... bringt doch nur probleme....
 

ARadauer

Top Contributor
da die Aufgabe für Fachinformatiker Anwendungsentwicklung der Jahrgangsstufe 2 ist und diese noch kein Interface oder Vererbung kennen...obwohl es etwas mit Vererbung zu tun haben könnte......
jaja... 100%ig Fehler in der TestPraemienSparVertrag.... PraemienSparVertrag ps muss eine Klassenvariable sein!
 

Marco13

Top Contributor
Java:
package mainpackage;

import mainpackage.subpackage.*;

public class TestCaseUser extends TestCase
{
    void run()
    {
        this.instanceVariable = null;
    }
}

Java:
package mainpackage.subpackage;

public class TestCase
{

}


---> Geht nicht.

Wenn man zusätzlich diese hier erstellt:

Java:
package mainpackage;

public class TestCase
{
    public Object instanceVariable;
}

gehts, und der import "import mainpackage.subpackage.*;" gilt dann als unbenutzt. Sollte wohl eine "Übung" sein, um zu verdeutlichen, die das Auflösen von Klassennamen abläuft - dass eben zuerst im eigenen Package gesucht wird, und dann in den imports....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T ZUgriff auf 'Werte' Java Basics - Anfänger-Themen 3
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
C Klassen Zugriff auf Objekt anderer Klasse Java Basics - Anfänger-Themen 8
B Methoden Zugriff auf Variable ermöglichen Java Basics - Anfänger-Themen 3
M Zugriff auf Arraylist Java Basics - Anfänger-Themen 7
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
B Erste Schritte Array-Zugriff Java Basics - Anfänger-Themen 10
D OOP Zugriff auf Objekte A in Klasse A aus Objekt B in Klasse B Java Basics - Anfänger-Themen 3
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
J Threads Zugriff auf Attribute Java Basics - Anfänger-Themen 16
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
N Problem bei Zugriff auf Textfelder Java Basics - Anfänger-Themen 6
LittleJavaCup Zugriff auf Klasse von package Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben