Your SlideShare is downloading. ×
0
Industrial Strength
                     Groovy

                Tools for the Professional
                   Groovy Deve...
Topics
   Testing: JUnit, TestNG, EasyB, Spock, Instinct
   Mocking: MockFor, GMock, Spock, EasyMock
   Injection: Spri...
Groovy’s Appeal
   Innovators/Thought leaders
       Ideas, power, flexibility, novelty, thinking community
   Early ad...
Testing: JUnit, TestNG, EasyB,
        Spock, Instinct
Mocking: MockFor, GMock, Spock,
           EasyMock
Dependency Injection

   Hollywood Principle
       Don’t call us, we’ll call you

   “All problems in computer science...
Dependency Injection
   Pattern for loosely coupled & testable objects
class Client {                class Client {
  Cal...
Dependency Injection: Guice
import com.google.inject.*

@ImplementedBy(CalculatorImpl)
interface Calculator {
    def add(...
Dependency Injection:
      Metaprogramming Style
class Calculator {
    def total = 0
    def add(a, b) { total++; a + b ...
Coverage: Cobertura
Code style: CodeNarc, IntelliJ
Duplication: Simian
Similarity Analyser 2.2.23 -
   http://www.redhillconsulting.com.au/products/simian/index.html
Copyrig...
Documentation: GroovyDoc
Builds: Maven, Ant, Gant, Graven,
         Gradle, Hudson
Modularisation: Grapes, OSGi
Upcoming SlideShare
Loading in...5
×

GR8Conf 2009: Industrial Strength Groovy by Paul King

1,106

Published on

Paul King presents various ways and tools to push your Groovy and Java development to an industrial level

Published in: Technology, Spiritual
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,106
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
59
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "GR8Conf 2009: Industrial Strength Groovy by Paul King"

  1. 1. Industrial Strength Groovy Tools for the Professional Groovy Developer Dr Paul King ASERT Brisbane, Australia Draft Only – Updated Version will be on gr8conf site and/or SlideShare
  2. 2. Topics  Testing: JUnit, TestNG, EasyB, Spock, Instinct  Mocking: MockFor, GMock, Spock, EasyMock  Injection: Spring, Guice  Coverage: Cobertura  Code style: CodeNarc, IntelliJ  Duplication: Simian  Documentation: GroovyDoc  Builds: Maven, Ant, Gant, Graven, Gradle, Hudson  Modularisation: Grapes, OSGi
  3. 3. Groovy’s Appeal  Innovators/Thought leaders  Ideas, power, flexibility, novelty, thinking community  Early adopters  Productivity benefits and collegiate community  Leverage JVM and potential for mainstream  Mainstream  Leverage existing Java skills, low learning curve  Leverage JVM and production infrastructure  Professional community  Tools, tools, tools
  4. 4. Testing: JUnit, TestNG, EasyB, Spock, Instinct
  5. 5. Mocking: MockFor, GMock, Spock, EasyMock
  6. 6. Dependency Injection  Hollywood Principle  Don’t call us, we’ll call you  “All problems in computer science can be solved by another level of indirection”  "...except for the problem of too many layers of indirection“  For attributions, see http://en.wikipedia.org/wiki/Inversion_of_control
  7. 7. Dependency Injection  Pattern for loosely coupled & testable objects class Client { class Client { Calculator calc = Calculator calc new CalculatorImpl() def executeCalc(a, b) { def executeCalc(a, b) { calc.add(a, b) calc.add(a, b) } } } }  Need to select setter,  Service locator/factory constructor, field style  Tightly coupled?  Can add complexity  Hard to test?  Manage configuration  Easy to understand?  Direct or framework  Refactoring/navigation?  Consistency/lifecycle
  8. 8. Dependency Injection: Guice import com.google.inject.* @ImplementedBy(CalculatorImpl) interface Calculator { def add(a, b) } @Singleton class CalculatorImpl implements Calculator { private total = 0 def add(a, b) { total++; a + b } def getTotalCalculations() { 'Total Calculations: ' + total } String toString() { 'Calc: ' + hashCode()} } class Client { @Inject Calculator calc // ... } def injector = Guice.createInjector() // ...
  9. 9. Dependency Injection: Metaprogramming Style class Calculator { def total = 0 def add(a, b) { total++; a + b } } def INSTANCE = new Calculator() Calculator.metaClass.constructor = { -> INSTANCE } def c1 = new Calculator() def c2 = new Calculator() assert c1.add(1, 2) == 3 assert c2.add(3, 4) == 7 assert c1.is(c2) assert [c1, c2].total == [2, 2]
  10. 10. Coverage: Cobertura
  11. 11. Code style: CodeNarc, IntelliJ
  12. 12. Duplication: Simian Similarity Analyser 2.2.23 - http://www.redhillconsulting.com.au/products/simian/index.html Copyright (c) 2003-08 RedHill Consulting Pty. Ltd. All rights reserved. Simian is not free unless used solely for non-commercial or evaluation purposes. {failOnDuplication=true, ignoreCharacterCase=true, ignoreCurlyBraces=true, ignoreIdentifierCase=true, ignoreModifiers=true, ignoreStringCase=true, threshold=6} Found 6 duplicate lines in the following files: Between lines 201 and 207 in /Users/haruki_zaemon/Projects/redhill/simian/build/dist/src/java/awt/image/W ritableRaster.java ... Found 66375 duplicate lines in 5949 blocks in 1260 files Processed a total of 390309 significant (1196065 raw) lines in 4242 files Processing time: 9.490sec
  13. 13. Documentation: GroovyDoc
  14. 14. Builds: Maven, Ant, Gant, Graven, Gradle, Hudson
  15. 15. Modularisation: Grapes, OSGi
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×