# Integer zu int konvertieren - JUnit



## strad (9. Nov 2007)

Hallo
Ich habe ein Problem mit einem JUnit Test Case. Die Suchfunktion hat keine nützlichen Ergebnisse geliefert...

JUnit 4.4 / JDK1.6.0_01

Meine Klasse, die ich gern testen würde, sieht so aus:


```
public class SortedIntArrayList<Integer> extends ArrayList<Integer> {
 
	
	public SortedIntArrayList(){
		
		super();
		
	}
	
    /* adds an integer val such that the list is
       always sorted in ascending order
    */
     public void addInt(Integer val){
         
     // @TODO implementation will follow
	
     }
	
}
```



und dies ist die Testklasse:


```
public class SortedIntArrayListTest extends TestCase {
 
	private SortedIntArrayList<Integer> saExp = new SortedIntArrayList<Integer>();
	private SortedIntArrayList<Integer> saAct = new SortedIntArrayList<Integer>();
 
	@Override
        public void setUp(){
		
		// set up the actual sortedIntArrayList
		saAct.add(-6);
		saAct.add(2);
		saAct.add(9);
		saAct.add(22);
		saAct.add(69);
		
		// set up the expected sortedIntArrayList
		saExp.add(-6);
		saExp.add(2);
		saExp.add(9);
		saExp.add(22);
		saExp.add(69);
		
		
	}
	
 
	// add an element at the beginning of the arraylist
	public void testAddIntFirstElement(){
		
		int val = -10;
		this.saAct.add(0,val);
		this.saExp.addInt(new Integer(val));
		
		assertEquals(saAct,saExp);
	}
}
```
 

Nun zu meinem Problem.
Ich versuche eine Methode addInt(Integer) in meiner SortedIntArrayList klasse zu machen, so dass der hinzugefügte Integer an der richtigen Stelle in die (sortierte) arrayList eingefügt wird.
In der addInt(Integer val) methode will ich dann den int Wert des übergebenen Integer rauslesen um ihn anschliessend an der richtigen Stelle einzusortieren.

Was ich versucht habe:


```
public void addInt(Integer val){
         
     if(this.get(0).intValue()<val.intValue()){
         // do something
      }
			
}
```


Funktioniert nicht!
Ebenfalls kann ich in dieser Klasse kein Integer wrapper Objekt instanzieren, 
also z.B.

```
Integer itgr = new Integer(10);
```
funktioniert nicht. Auch Integer.parseInt usw wird nicht erkannt.
Wenn ich jedoch ein neues Projekt eröffne und etwas wie:



```
public static void main(String[] args) {
 
   int i;
   Integer itgr = new Integer(10);
   i = itgr.intValue();
 
}
```
 versuche, klappt alles tadellos.

in den Properties der klasse ist das compiler compliance level auf 6.0 gestellt.
Habe dies sowohl mit NetBeans als auch mit Eclipse versucht, ohne Erfolg.

Wenn mir also jemand sagen könnte, warum dies in dieser Klasse nicht funktioniert, wäre ich sehr dankbar...

Gruss, David


----------



## Wildcard (9. Nov 2007)

Ersetze 'funktioniert nicht' bitte mit einer sinnvollen Aussage. Wer sagt das es nicht funktioniert? Wie wird dir das mitgeteilt?


----------



## strad (9. Nov 2007)

ok, war vielleicht nicht verständlich:



> if(this.get(0).intValue()<val.intValue()){
> // do something
> }



sollte meiner Meinung nach 2 int Werte vergleichen, nämlich den int value des Integers in dieser arrayList an der stelle 0 (this.get(0).intValue() ) und den int value des Integers val ( val.intValue() ).

Eclipse sagt: "The method intValue() is undefined for the type Integer"
und java.lang.*; habe ich natürlich importiert.


----------



## Wildcard (9. Nov 2007)

Sicher das du dich nicht einfach vertippt hast?
Schon das sieht sehr seltsam aus. Was ist denn this? Ich sehe hier keine Klasse die eine Methode get(int i) hat.

```
this.get(0).intValue()<val.intValue()
```


----------



## strad (9. Nov 2007)

ja, wegen dem vertippen bin ich mir sicher.

die methode get(int i) ist von der Klasse ArrayList, die ich ja mit extends vererbe.
this bedeutet hier einfach, dass ich das element von dieser Instanz von sortedIntArrayList will.

auszug aus der api: 

"get(int index)
          Returns the element at the specified position in this list."


----------



## SlaterB (9. Nov 2007)

und solche Grundlagen testet du in einer Klasse, in der auch komischer Code wie
> saExp.add(2); 
>      saExp.add(9); 
>      saExp.add(22); 
>      saExp.add(69); 

steht?

ich würde das in einer Testklasse


```
public class Test
{
    public static void main(String[] args)
    {
        int i = new Integer(4).intValue();
    }
}
```
ohne jede imports testen, klappt das bei dir?

natürlich hast du mit JUnit eine bestimmte Umgebung, in der du nicht alles kontrollieren kannst,
aber bitte auch da eine einfachst mögliche leere Klasse nehmen,
insbesondere alle eigenen Klassen entfernen,
idealerweise in einem eigenen package, gar eigenen Projekt/ Workspace/ (.. Entwicklungsumgebung/ Rechner  )

wo funktioniert es, ab wann funktioniert es nicht mehr?

hast du eine eigene Klasse Integer definiert oder importierst du Fremdlibaries, in denen eine Klasse Integer existiert?
was kommt bei 
System.out.println(Integer.class.getName()); raus?

und wie gesagt bitte (erstmal) nicht mit deiner ArrayList oder sonstwas testen, 
sondern ganz elementar
int i = new Integer(4).intValue();


----------



## Wildcard (9. Nov 2007)

Ach die Klasse erbt von ArrayList? ok...
Hast du eventuell noch eine andere Klasse die Integer heißt?


----------



## strad (9. Nov 2007)

```
public class Test
{
    public static void main(String[] args)
    {
        int i = new Integer(4).intValue();
    }
}
```

habe ich soeben versucht, dies klappt, mit system.out.println(i) kriege ich 4... sowohl wenn ich ein total neues projekt nehme als auch in meinem obigen projekt.

bei 
System.out.println(Integer.class.getName()); 
sagt mir eclipse: "illegal class literal for the type parameter Integer".
Es ist, als ob eclipse die Klasse Integer gar nicht kennen würde.

meine imports:

import java.util.*;
import java.lang.*;
import junit.framework.TestCase;


in junit.framework existiert auch keine klasse Integer


----------



## Wildcard (9. Nov 2007)

Hast du schon das naheliegenste gemacht und Eclipse neu gestartet? Refresh? Den Workspace gewechselt?


----------



## happy_robot (9. Nov 2007)

```
public class SortedIntArrayList<Integer> extends ArrayList<Integer> 
...
```
Die Angabe des ersten <Integer> ist nicht notwendig. Keine Ahnung ob's hilft, aber vielleicht verwirrt's den Compiler.   

Statt der Klasse Integer solltest Du überall den primitiven typ int nutzen, ausser bei Typangaben wo Referenzdatentypen zur Definition oder Deklaration benötigt werden.


Schau mal nach ob das Projekt auch ein JDK/JRE > = 1.5 nutzt.


----------



## Wildcard (9. Nov 2007)

ugh. Der ist's natürlich. Wenn dann müsste es schon <T extends Integer> sein.
Du verdeckst die Klasse Integer mit falsch eingesetzten Generics...


----------



## Wildcard (9. Nov 2007)

Witzig, selbst für dieses absurde Konstrukt hat Eclipse ein Warning  :lol: 


> The type parameter Integer is hiding the type Integer


----------



## strad (9. Nov 2007)

happy_robot hat gesagt.:
			
		

> ```
> public class SortedIntArrayList<Integer> extends ArrayList<Integer>
> ...
> ```
> ...



Das war das Problem! Danke für die kompetente Hilfe!

So, nun kann ich weiterarbeiten mit meinem "komischen" code


----------

