Achja bzgl. untestbaren Code:
Einfach zu viele externe Abhängigkeiten, wenig Manipulationsmöglichkeiten. Worst Case (gerade so eingefallen): du hast ne Klasse und übergibst im Konstruktor eine Web File welche sie downloaden soll. Mit "Download()" startest du dann den Download. Da hast du dann halt natürlich Probleme irgendwas zu Testen (z.B. Wie simulierst du ein Timeout? Du kannst keinen Contract mit Hilfe von Unit Tests mehr schließen -> nicht testbar).
Guter Einstieg ist imo http://xunitpatterns.com/ hab dafür aber damals den ganzen Sommer gebraucht zum Lesen - sehr zach. Aber da steht alles drinnen (nur auf abstrakter Ebene mit Fallbeispielen in JUnit - also nicht für eine spezielle Technologie jetzt).
LG