Diese Woche in Unterbesetzung aber trotzdem fleißig. Die DataAccessObject-Schnittstelle hat ein neues, vereinheitlichtes Format, bei dem jetzt hoffentlich klar ist, was an Eingrenzungsmöglichkeiten, wie beispielsweise where-Bedingungen, und Funktionalitäten, wie z.B. Sortierung, zur Verfügung stehen. Methoden wie „count“, „delete“ und „select“ erwarten nun immer ein Where, welches mittels WhereBuilder zusammengesammelt wird. „find“ und „min“/“max“ können ebenfalls über eigene Builder versorgt werden, inkludieren aber ebenfalls einen WhereBuilder. Somit ist der Zugriff vereinheitlicht und wir werden uns nächste Woche nochmal anschauen, ob es wirklich eine Vereinfachung ist.
Ich habe mich auch einem Unittest gewidmet, der schon länger fehlgeschlagen ist, ich aber nicht herausgefunden habe, weshalb Mockk beim gemockten Objekt nicht das korrekte Ergebnis zurückgeliefert hat. Letztendlich ist mir aufgefallen, dass die Methode, die ich mocken wollte, einen varargs-Parameter enthält. Obwohl ein einzelner Wert valide ist, muss hier ein Array übergeben werden:
//Konstruktor:
Reflections(prefix: String, vararg scanners: Scanner)
//Es muss mit Array gemockt werden:
mockkConstructor(Reflections::class)
every {
constructedWith<Reflections>(
EqMatcher(packagePath),
OfTypeMatcher<Array<Scanner>>(Array<Scanner>::class)
).getSubTypesOf(IService::class.java)
} returns resultSet
Nebenbei bin ich noch über eine Performance-Verbesserung für die Dependency-Beschaffung gestolpert. Da die Repositories in der Reihenfolge, in der sie im gradle-File definiert werden, nach den Dependencies befragt werden, gab es bei uns 151 Aufrufe, die mit „Resource missing“ zurück kamen. Wir hatten bei uns unser Github-Repository vor Maven eingebunden. Dies haben wir mittels
./gradlew build –refresh-dependencies –info
ermittelt. Somit kann die beste Reihenfolge, je nach eingebundenen Repositores, gefunden werden. Jetzt sind wir lediglich bei 8 extra Aufrufen, dadaurch, dass wir auf folgende Reihenfolge umgestellt haben:
repositories {
mavenCentral()
google()
//unser Repository
RepositoryManager(rootProject).addConsumeRepository(this)
}