Poster taggade med ‘python’

Sida 1 av 212

Detta är den sista delen av tre i en artikelserie om automatiserade integrationstester. Den första delen ger en kort beskrivning av syftet med integrationstester och de utmaningar som ofta uppstår vid testning. Där visar jag också hur man kan parallellisera tester i JUnit för att minska exekveringstiden.

Del två visar på användningen av parametriserade tester och hur man på ett bra sätt kan använda extern testdata (testfixtures).

Denna sista del visar hur man kan koppla ihop sina testsviter med open source-verktyget TestLink för att få fram trevliga rapporter. Läs mer >>

Detta är den andra delen av tre i en artikelserie om automatiserade integrationstester. Den första delen ger en kort beskrivning av syftet med integrationstester och de utmaningar som ofta uppstår vid testning. Där visar jag också hur man kan parallellisera tester i JUnit för att minska exekveringstiden.

Denna del visar på användningen av parametriserade tester och hur man på ett bra sätt kan använda extern testdata (testfixtures).

Den sista delen visar hur man kan koppla ihop sina testsviter med open source-verktyget TestLink för att få fram trevliga rapporter. Läs mer >>

När man skall skriva automatiserade integrations- eller regressionstester ställs man delvis inför lite andra utmaningar än vad som gäller för ”vanliga” enhetstester. Detta är den första delen av tre i en artikelserie om automatiserade integrationstester. Denna första del ger en kort beskrivning av syftet med integrationstester och de utmaningar som ofta uppstår vid testning. Där visar jag också hur man kan parallellisera tester i JUnit för att minska exekveringstiden.

Del två visar på användningen av parametriserade tester och hur man på ett bra sätt kan använda extern testdata (testfixtures).

Den sista delen visar hur man kan koppla ihop sina testsviter med open source-verktyget TestLink för att få fram trevliga rapporter.

Läs mer >>

Det är vanligt förekommande att utvecklare behöver skriva kod för att konvertera listor. Listor kan behöva filtreras eller konverteras mellan olika format. Ett vanligt förekommande mönster när en lista ska konverteras är att skapa en ny lista för resultatet, iterera över ett givet data-set, konvertera varje post och lägga det till resultat-listan. Det är inte helt ovanligt att resultatet också filtreras i denna process. Nedan är ett exempel i Java:

Collection<String> c = new ArrayList<String>();
for (Person person : persons) {
  if (person.getAge() >= 18) {
    c.add(person.getName());
  }
}

Ovanstående exempel kan tyckas både enkelt och funktionellt men jämför med hur detta kan lösas i Python:

l = [person.name for person in persons if person.age >= 18]

Alternativt genom att använda filter och lambda kan det också skrivas så här:

l = [person.name for person in filter(lambda person: person.gender >= 18, persons)]

I Java finns tyvärr inte motsvarande funktionalitet. Det finns däremot alternativ för att lösa det på ett liknande sätt. Guava är ett projekt och innehåller flera bibliotek som Google använder till sina Java-projekt. Bland annat erbjuder dessa bibliotek funktioner för att filtrera och transformera listor på ett mer ‘funktionellt’ sätt. Nedan är en lösning som löser samma problem som ovan implementerad med hjälp av dessa funktioner:

Function<Person, String> f = new Function<Person, String>() {
  @Override
  public String apply(Person input) {
    return input.getName();
  }
};

Predicate<Person> p = new Predicate<Person>() {
  @Override
  public boolean apply(Person input) {
    return input.getAge() >= 18;
  }
};

Collection<String> c = Collections2.transform(Collections2.filter(persons, p), f);

Enklare exempel som detta blir möjligtvis varken mer kompakta eller lättlästa. När konverteringar som denna däremot upprepas så blir detta alternativ genast mer attraktivt. Jämför till exempel med JDBC-mappers som inte helt sällan återanvänds. Guava är licensierat under Apache License 2.0 och innehåller flertalet användbara funktioner. Ett alternativ är också Apache Commons, värt att nämna är att Apache Commons för närvarande tyvärr inte stödjer Java generics.

Lägg till följande beroende i din Maven-pom för att testa Guava:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>10.0.1</version>
</dependency>

I väntan på en Java-version (Java 8?) som stödjer closures och lambda-funktioner går det också att använda lambdaj. Med lambdaj kan en lista till exempel konverteras och filtreras på följande sätt:

import static ch.lambdaj.Lambda.*;
import static org.hamcrest.Matchers.*;
...
Collection<String> c = collect(filter(having(on(Person.class).getAge(), greaterThanOrEqualTo(18)), persons), on(Person.class).getName());

Lägg till följande Maven-beroende för att använda lambdaj:

<dependency>
  <groupId>com.googlecode.lambdaj</groupId>
  <artifactId>lambdaj</artifactId>
  <version>2.3.1</version>
</dependency>

Du har just klickat dig in på den första delen i min samling artiklar om Python – detta dynamiska högnivåspråk som både jag, många andra utvecklare samt organisationer som Google och YouTube tycker är grymt att utveckla i. I de kommande artiklarna tar jag upp bakomliggande filosofier, egenskaper hos språket, hantering av datatyper och allmänna tips och tricks som kan vara till hjälp för dig som är ny i språket. Läs mer >>

På gårdagens konsultmöte berättade Mårten Gustavsson från hitta.se om deras arkitektur vilket var otroligt intressant.

Han pushar bland annat för följande:

I veckan föreläste Tommy om Java på nya kunden WSP. Han följde sedan upp det genom att tillsammans med Emil Stridfeldt snacka om Java Power Tools, TDD och designskuld på Com Hem. Och imorgon ska Nathalie föreläsa om Python på Geek Girl Meetup!

På konsultmötet i torsdags fick vi se två spännande kodkator av Nathalie och Robert med fokus på dynamiska språk (samt lite Scala) – mycket intressant tycker jag! Robert forcerade igenom applikationen Sellable mha Ruby on Rails och Nathalie demade Python. Här har ni Roberts fina presentation om dynamiska språk.

Arbetet med den nya sajten cygni.se pågår för fullt och på måndag ska vi träffa vår grafiker som även designade allastudier.se som Cygni utvecklade tillsammans med Metro. Det ska bli mycket spännande att se vad han har för tankar och idéer.

Ibland kan det vara skönt att inte uppfinna hjulet en gång till, att låta någon annan göra jobbet och ägna sin tid åt viktigare saker. Ibland kan det vara skönt att gå till plugins.jquery.com och inse att det du vill göra i jQuery redan är gjort och det, handen på hjärtat, många gånger bättre än vad du själv hade lyckats med. Att använda ett jQuery-plugin kan spara dig mycket tid och arbete då alla jQuery-funktioner du skulle behöva leta upp och använda redan är samlade och ihop-pusslade.

Utifrån ett webbprojekt signerat Cygni, listar jag i den här artikeln fem jQuery-plugins som vi valt att använda oss av.  Jag ger en introduktion till pluginet, beskriver lite kort hur det fungerar och ger sedan exempel på var och hur det används i det projekt vi här kan kalla SiteDoe.

Läs mer >>

När man börjar utveckla i Scala dröjer det inte länge innan man behöver ett byggverktyg. Maven kommer med fullt javastöd  men för att kompilera Scala behövs maven-scala-pluginen. Det  gör att man börjar undra om det finns ett byggverktyg med fullt inbyggt stöd för Scala och det gör det, Simple Build Tool, eller SBT. På code.google.com finns SBT att ladda ner och bra engelsk dokumentation för installation och handhavande.

SBT liknar Maven väldigt mycket; samma konvention för hur filerna ska organiseras, de flesta av Mavens kommandon har direkta motsvarigheter i SBT. Så istället för mvn compile skriver man sbt compile.

SBT kan använda Mavens repositories, till och med Mavens pom.xml för beroendehantering. Det gör att det är väldigt enkelt att testa SBT i ett befintligt Maven-projekt.

Så vilka fördelar har SBT framför Maven, förutom att kompilera både scala- och javakod utan plugin-konfiguration?
Läs mer >>

Fastän man inte är en Linux-admin så är det inte helt ovanligt att man hamnar i situationer där man måste knacka ihop ett eller flera skript som gör något smart och nyttigt. Om du då är som mej och måste sitta och googla en massa för att lyckas få skriptet att göra den enklaste grejen så är det här tipset kanske något för dej. Jag tänkte visa hur enkelt det är att använda sig utav Groovy när man skriver sina shellskript. Läs mer >>

Sida 1 av 212