fredag 31 augusti 2012

Kod templat i eclipse för att snabba upp TDD.

I testdriven utveckling så är det repetitivt så att man börjar med testa att det går att skapa en instans av klassen som skall testas. Kod:

package se.sjv.samladkundbild.infrastructure;


import static org.testng.Assert.assertNull;
import org.testng.annotations.Test;
import se.sjv.samladkundbild.domain.entity.Kund;

public class KundQueryImplTest {

    @Test
    public void testCreate() {
        final KundQueryImpl sut = new KundQueryImpl();
        assertNotNull(sut);
    }


}

Livslängden för metoden är kort. När man skapat nästa metod så har man troligen gjort det genom att byta namn på create eller raderat den.

Dessutom så vill du ha med dig en massa junk i form av beroende till tex testNG och Mockito. Dessa importer vill man absolut inte reppetera för varje testklass man skapar. Momentet bör automatiseras så mycket det går.

Eclipse Templates

Templates to the rescue! Nås via:
/ Windo / preferences / Java / Editor / Templates

Här är mitt Eclipse templat för att skapa koden.

${staticImport:importStatic('org.testng.Assert.*')}
${imp:import(org.testng.annotations.BeforeMethod,org.testng.annotations.Test,org.mockito.Mockito)}

@Test
public void testCreate() {
    ${type} sut = new ${name};
    assertNotNull(sut);
}

Jag har bundit templatet till "create" och skriver altså följande:

create, Ctrl + space + enter

Väl inne i test stim så skapar man testmetoder en serie testmetoder. För detta använder jag följande template:


@Test
public void test${name}() {
${staticImport:importStatic('org.testng.Assert.*')}
${imp:import(org.testng.annotations.BeforeMethod,org.testng.annotations.Test,org.mockito.Mockito)}
${cursor} 
}


Jag har bundit templatet till "test" och skriver altså följande:

create, Ctrl + space + enter

som jag nämnde ovan så kan man radera create metoden efter att ha skapat en eller flera testmetoder.

Om du vill ladda ner templaten här:
https://www.dropbox.com/home/java/eclipse/public

Glöm inte att tweaka Eclipse så den gör precis som du vill:
http://sweethashtag.blogspot.se/2012/08/saker-jag-gor-for-varje-nytt-eclipse.html


Happy coding.

onsdag 29 augusti 2012

Varför GIT, det är ju inget fel med Subversion?

Den här frågan dyker helatiden upp. Jag använder båda men kan ibland känna mig lite dum eftersom alla andra ser ljuset så klart, men inte jag.

Jag kanske har sett ljuset, men jag kan inte förklara det. Vilket är lika illa i min värld.Distribuerat versions system
Yes, vi vet! GIT är distribuerat.
  • Alla har sin egen version av alltihop.
  • Man kan brancha ut lokalt.
    Utan att påverka omgivningen kan du skapa branches, merga och leva rövare.

Staging area

Du har en area som man kan trycka upp commits till innan man verkligen commitar. Helt tokigt! Precis vad jag alltid önskat!

Ponera att du skall fixa en bugg. Men koden i klassen ser ut som crap.

  • fixa buggen
  • Kör: git add.
    Du har nu stagat din förändring.
  • clean da code
  • git commit -m 'fixa buggen är nu i lokalt repo men inte min clean'

Det är faktiskt inte otrevligt att liksom lasta av det viktiga, det som skall med i en commit. Sammtigt som man kan fortsätta med att kanske rensa.

Mindre trevligt är att Git envisas med att blanda begreppen i en, för dem säkert helt tydlig, soppa.
http://www.benspaulding.us/weblog/2009/mar/17/git-staging-call-it-what-it-is/

Rename och move

GIT är bättre på att klara av det blotta faktum att man flyttar runt och refakturerar på saker. Det här är minsann inte en liten skillnad. Så använd inte git mv för det behövs inte.

http://stackoverflow.com/questions/6172037/really-a-concrete-example-that-merging-in-git-is-easier-than-svn

Debugging

Massively cool, git blame och git bisect. Mest coolt för att jag inte förstår riktigt ännu. But I will!

Socialt

Git är socialt också. Man kodar och commitar i en eufori av att få lägga sin fritid på kodande. Jag köper det rakt av :)

www.github.com

Övriga Källor

måndag 27 augusti 2012

Saker jag gör för varje nytt Eclipse workspace jag skapar

Detta är mitt första blogginlägg. Och så väljer jag att blogga om något så tråkigt som Eclipse inställningar, #dear.

TOC:

  • Konsoll utskrift
  • Validation
  • Checkstyle
  • Code templates *
  • JRebel
  • Findbugs
  • Templates *
  • Favorites
  • Utseende och snabb knappar *
  • Maven

Innan man gör sina Eclipse inställningar så måste man installera alla fina plugins. Dessa blir en del av Eclipse installationen och kommer inte att behöva göras om för varje workspace. TODO:Eclipse Plugins du inte kan leva utan.

Allt hittas under window/preferences.

Det är bara att erkänna. Jag borde automatisera det här. Men eftersom man är bekväm så väntar man på att någon annan skall göra det. Kanske har någon redan gjort det? Om du kan hjälpa mig att effektivisera detta så är jag mycket tacksam.

Vissa saker kan man exportera / importera mellan workspaces vi tex filer. Andra åtgärde måste man helt enkelt göra manuellt. Rubriker markerade med * kan man importera / exportera.

Konsoll utskrift

/run/debug/
bocka av: Limit console output.
Default trunkerar konsollen efter x antal rader.

Validation

/validation/
Backa av allt under Build som inte är ett måste för att projektet skall köra. Dear det gör skillnad :)

Code templates *

/Java/Code style/Code template
Importera:
  • Clean up
  • Code template
  • Formatter
Clean up och Formatter gör saker med din kod. De spar dig massor av knapptryckningar och du blir en bättre människa :)

Ladda ner dem här: Eclipse code style
TODO: Läs den detaljerade beskrivningen här.

Checkstyle *

/checkstyle/
Importera Checkstyle inställningarna samt sätt på checkstyle på alla projekt.
Ladda ner dem här: Checkstyle conf
När du importerar kontrollera att projekten kör med rätt profil.

Till skillnad från Code templates så gör checkstyle inget med din kod, den bara gnäller. Och som den gnäller, ojoj! Men rätt tweekad och med lite vana så är den en kompis du inte vill vara utan.

TODO: Läs den detaljerade beskrivningen här.

JRebel

Det finns vissa saker man måste kosta på sig, JRebel ären sådan. JRebel kommer att göra din värld mindre smärtsam, speciellt om du kör webb utveckling.

Om du kör maven, lägg till nödvändig Jrebel xml grunkor i parent pom.
Lägger till jrebel.xml till src/main/java samt src/main/webapp i alla projekt.

Findbugs

/findbugs/
Aktivera findbuggs för projekten. Bocka i: Run automatically. Jag har inte gjort någon förändring i Findbugs, den är bra som den är. Precis som checkstyle så gör Findbugs inget med din kod, den bara gnäller.

Templates *

Java / editor / templates
Lägger till mina kod templates för att snabba upp TDD:n.
Ladda ner dem här: Kod templates
TODO: Läs den detaljerade beskrivningen här.

Favorites

Java / editor / favorites
Lägg till alla de statiska importer som du använder ofta.

Exempel:
org.mockito.Matchers
org.mockito.Mock
org.testng.Assert
org.testng.Assert.fail

Utseende och snabb knappar *

Följande två inställningar exporteras och importers lätt via: file / export / general: apperance och keyes.

Java / apperance / Members sort order
Ställer om hur Eclipse sorterar klassernas medlemmar. Publika först och default sist.

General / keysEftersom jag inte står ut med default kombinationerna för att köra mina enhets tester så gäller tweakningen främst dem.

Alt + G -> Generate getter and setter.
Alt + R -> Run TestNG test
Alt + T -> Debug TestNG Test
Alt + C -> Clean
Alt + S -> Sort members
Ctrl + J -> Jump to Test / Member under Test

Maven

/ maven /

Kör du maven och Eclipse så är det i allmänhet lite synd om dig. Men glöm inte att ta ner javadoc och källkod. På så vis så får du intellisense och kan debugga även på inkluderade artifakter.

Bocka i:
  • Download Artifact sources
  • Download Artifact JavaDoc

Sweet, u are all prepared.