# Junittest



## SuperSheriff (3. Jun 2016)

Hi,

ich hab noch einen bug in meinem Programm bzw ein kleiner fehler im junittest schlägt noch aus und ich weiß einfach nicht wieso.

Wäre  sehr dankbar, wenn mir jmd helfen könnte.

hier ist die methode die noch nicht richtig funktionier. der link zeigt das üb.

https://www.dropbox.com/s/rfc8kt93u19vy9r/Vorfuehraufgabe09.pdf?dl=0


Vielen Dank schon mal!



```
package studiplayer.audio;

import java.util.Comparator;

public class AlbumComparator implements Comparator<AudioFile>{

    @Override
    public int compare(AudioFile af0, AudioFile af1) {
        if(af0 != null && af1 != null){
           
            if(!(af0 instanceof TaggedFile) && af1 instanceof TaggedFile){
                return -1;
            }else if(af1 instanceof TaggedFile && !(af0 instanceof TaggedFile)){
                return 1;
            }else if(!(af0 instanceof TaggedFile) && !(af1 instanceof TaggedFile)){
                return 0;
            }else{
                return ((TaggedFile) af0).getAlbum().compareTo(((TaggedFile) af1).getAlbum());
                }
        }else{
            throw new NullPointerException("incorrect album references!");
        }
    }

}
```


----------



## AndiE (3. Jun 2016)

Kannst du noch die Testklasse posten und die Stelle, wo ein Test nicht erfüllt wird. ansonsten wird eine Abfrage zwei Mal ausgeführt, wenn ich richtig gesehen habe (!(af0..)&& af1)


----------



## Cromewell (3. Jun 2016)

SuperSheriff hat gesagt.:


> *else* *if*(af1 *instanceof* TaggedFile && !(af0 *instanceof* TaggedFile)


Ja, du hast hier af1 und af0 vertauscht


----------



## SuperSheriff (3. Jun 2016)

mhm oke, hat sich aber nichts geändert, ist immer noch der gleiche fehler


----------



## SuperSheriff (3. Jun 2016)

wenn jmd von euch eclipse benutzt könnte ich euch auch das ganze projekt schicken. Dann hättet ihr die junittests mit dabei, denn ich werde aus den junittests leider nicht schlau...


----------



## mrBrown (3. Jun 2016)

Was ist denn überhaupt der Fehler?

Und wie sieht die Methode jetzt aus?


----------



## AndiE (4. Jun 2016)

```
// create a PlayList
        PlayList pl1 = new PlayList();
        try {
           // pl1.add(new TaggedFile("audiofiles/kein.wav.sondern.ogg"));
            pl1.add(new TaggedFile("audiofiles/Rock 812.mp3"));
            pl1.add(new WavFile("audiofiles/wellenmeister - tranquility.wav"));
            pl1.add(new TaggedFile("audiofiles/wellenmeister_awakening.ogg"));
        } catch (NotPlayableException e) {
            fail("Cannot create AudioFile:" + e.getMessage());
        }
        assertEquals(pl1.size(),3);
        pl1.sort(SortCriterion.ALBUM);
        System.out.println(pl1.toString());
        assertEquals(
                "Sorting according to criterion album is not correct",
                "[wellenmeister - tranquility - 02:21, "
                        //+ "kein.wav.sondern - 00:00, "
                        + "Eisbach - Rock 812 - The Sea, the Sky - 05:31, "
                        + "Wellenmeister - TANOM Part I: Awakening - TheAbsoluteNecessityOfMeaning - 05:55]",
                pl1.toString());
    }
}
```

Das ist GRÜN. Der Grund ist recht einfach. Du willst eine ungültige Datei einfügen. Überprüfe deine Anwendung danach.


----------



## mrBrown (4. Jun 2016)

Er hatte mir Privat geschrieben, der Fehler (zumindest der, den er mit geschickt hat) ist kein fehlgeschlagener Test, sondern nur ein geprinteter Stacktrace. Innerhalb des Tests wird getestet, ob die auch gefangen wird, und das wird sie korrekt.


----------



## SuperSheriff (4. Jun 2016)

was hast du nun geändert?

und der junittest ist jzt grün? also der der klasse playlist


----------



## AndiE (4. Jun 2016)

```
// pl1.add(new TaggedFile("audiofiles/kein.wav.sondern.ogg"));
```
Ich habe diese Zeile auskommentiert. "kein.wav.sondern.ogg"dürfte nach meinem Wissen nicht als gültiger Name durchgehen, weil er mehr als ein "dot(.) hat.


----------



## mrBrown (4. Jun 2016)

SuperSheriff hat gesagt.:


> was hast du nun geändert?
> 
> und der junittest ist jzt grün? also der der klasse playlist


WAS ist denn bei dir der Fehler?



AndiE hat gesagt.:


> ```
> // pl1.add(new TaggedFile("audiofiles/kein.wav.sondern.ogg"));
> ```
> Ich habe diese Zeile auskommentiert. "kein.wav.sondern.ogg"dürfte nach meinem Wissen nicht als gültiger Name durchgehen, weil er mehr als ein "dot(.) hat.



Pfade können so viele Punkte haben wie sie wollen - zumindest unter allen unix-artigen. Ist das unter Windows etwa anders?


----------



## mrBrown (4. Jun 2016)

So, ich bekomme als einzige Exception einen NullPointer in AlbumComparator.java:18

Das Problem ist, das Album i TaggedFile uU null ist, wenn kein Autor hinterlegt ist. Lösung: Fang das ab, oder initialisiere das Default mit irgendeinem Wert, zB leerer String.


----------



## SuperSheriff (4. Jun 2016)

sowas ?


```
package studiplayer.audio;

import java.util.Comparator;

public class AlbumComparator implements Comparator<AudioFile>{

    @Override
    public int compare(AudioFile af0, AudioFile af1) {
        if(af0 != null && af1 != null){
          
            if(!(af0 instanceof TaggedFile) && af1 instanceof TaggedFile){
                return -1;
            }else if(af0 instanceof TaggedFile && !(af1 instanceof TaggedFile)){
                return 1;
            }else if(!(af0 instanceof TaggedFile) && !(af1 instanceof TaggedFile)){
                return 0;
            }else{
                if(((TaggedFile)af0).getAlbum() == null || ((TaggedFile)af1).getAlbum() == null){
                    throw new NullPointerException("incorrect values");
                }else{
                    return ((TaggedFile) af0).getAlbum().compareTo(((TaggedFile) af1).getAlbum());
                    }
                }
        }else{
            throw new NullPointerException("incorrect album references!");
        }
    }
}
```


----------



## mrBrown (4. Jun 2016)

So schmeißt du selbst die Exception, die sonst durchs compare geschmissen werden würde, ändert nichts  

Wie könntest du denn nach Albumname sortieren, wenn ein Albumname leer ist?


----------



## SuperSheriff (4. Jun 2016)

leer würde funktionieren oder, blos null nicht. weiß es echt nicht wie man das vernünftigt abfangen könnte


----------



## SuperSheriff (4. Jun 2016)

könnte höchsten null als größer ansehen lassen und wenn beide null sind 0 zurückliefern? ist das ne option?


----------



## mrBrown (4. Jun 2016)

Das wäre eine Möglichkeit


----------



## SuperSheriff (4. Jun 2016)

aber?  hört sich ja an, als ob es noch ne bessere option gibt


----------



## mrBrown (4. Jun 2016)

Ich würde album immer mit leerem String vorinitialisieren, dann läuft man auch nicht Gefahr, NPE zu bekommen


----------



## SuperSheriff (4. Jun 2016)

danke, deine variante funktioniert


----------

