Testing is key when it comes to developing awesome mobile apps. Our Lead Test Engineer Tomek and Project Manager Slawek talk about Polidea's unique testing methods.
How to create Inner classes - Groovy vs. Java
Testing Android with RoboSpock is a walk in the park - Groovy and Spock/Robospock do the hard work for you. It's always nice to have a good clear code, well formatted, object oriented etc. Recently I've been redeveloping android-image-cache and I came across a very interesting problem. Groovy and Java are good friends but the differ in some cases, especially when it comes with Inner Classes. I have a class called CacheTask in ImageCache which is not static so the creation of this object must go via ImageCache object. In Java you could write
ImageCache cache = new ImageCache() ImageCache.CacheTask task = cache.new ImageCache.CacheTask("new name")
There's a long stackoverflow discussion on why the syntax is correct. But let's go back to Groovy. The code snippet won't work because Groovy will try to find a method signature starting with 'new'. In the same stackoverflow thread there is tricky solution how to do it Groovy
def cache = new ImageCache() def task = new CacheTask(cache, "new name")
IntelliJ underlines the constructor because in the code there's no constructor matching these arguments. The code works because the generated bytecode includes a hidden constructor where IDE just checks the .groovy file.
- PrzemysławSoftware Engineer