SlideShare une entreprise Scribd logo
1  sur  33
Automated testing
Android
Dependency Injection and Dagger
Dependency Injection
Dagger
Live Coding Sample 1
Live Coding Sample 2
The Business Goal
Why not automated tests on mobile?
Motivation for Dependency Injection
● Decouple concrete from concrete
● Uniformity
● Reduced Dependency Carrying
● More Testable Code
Decouple concrete from Concrete
class MyStringUtils {
private Context context;
StringUtils(Context context) {
this.context = context;
}
public String helloWorld() {
return context.getString(R.string.hello_ciklum);
}
}
Decouple concrete from Concrete
class MainActivity extends Activity implements View.OnClickListener {
@Inject MyStringUtils myStringUtils;
void onCreate(Bundle savedInstanceState) {
… }
void onClick(View v) {
MyStringUtils myStringUtils1 = new MyStringUtils(this.getApplication()); // new operator
MyStringUtils myStringUtils2 = MyStringUtils.getInstance(this); // singleton pattern
MyStringUtils myStringUtils3 = MyStringUtilsFactory.getInstance(this); // factory patterns
String str1 myStr = MyStringUtils.helloWorld(this); // Static
String str = myStringUtils.helloWorld();
TextView msgView = (TextView) findViewById(R.id.textView);
msgView.setText(str);
}}}
Uniformity
class MainActivity extends Activity implements View.OnClickListener {
@Inject MyStringUtils myStringUtils;
void onCreate(Bundle savedInstanceState) {
… }
void onClick(View v) {
MyStringUtils myStringUtils1 = new MyStringUtils(this.getApplication()); // new instance
MyStringUtils myStringUtils2 = MyStringUtils.getInstance(this); // Singleton pattern
MyStringUtils myStringUtils3 = MyStringUtilsFactory.getInstance(this); // Factory pattern
String str1 myStr = MyStringUtils.helloWorld(this); // Static
String str = myStringUtils.helloWorld();
TextView msgView = (TextView) findViewById(R.id.textView);
msgView.setText(str);
}
}}
Dependency Carrying
class MyActivity extends Activity {
onClick(View v) {
A a = new A(this);
a.doSometing();
}
}
class A {
Context mContext;
public (Context mContext){
this.mContext = mContext;
}
public doSomething() {
B b = new B(mContext);
String str =
b.getSomeString(R.strings.helloWorld);
}
}
class B {
Context mContext;
public B(Context mContext) {
this.mContext = mContext;
}
public String getSomeString(int resourceId) {
return
mContext.getString(resourceId);
}
}
Reduced Dependency Carrying
@Module class ProdModule {
Context mContext;
public ProdModule(Context mContext) {
this.mContext = mContext;
}
@Provide B provideB() {
return new B(context);
}
@Provide A provideA(B b) {
return new A(b);
}
}
class MyActivity {
@Inject A a;
onCreate(){
((MyApplication)getApplication()).inject(this);
}
onClick(View v) {
A a = new A(this);
a.doSomething();
}
}
class A {
@Inject B b;
public doSomething() {
String str = b.getSomeString(R.strings.helloWorld);
}
}
class B {
Context mContext;
public B(Context mContext) {
this.mContext = mContext;
}
public String getSomeString(int resourceId) {
return mContext.getString(resourceId);
}
}
More Testable Code
class MainActivity extends Activity implements View.OnClickListener {
@Inject MyStringUtils myStringUtils;
void onCreate(Bundle savedInstanceState) {
… }
void onClick(View v) {
String str = myStringUtils.helloWorld();
TextView msgView = (TextView) findViewById(R.id.textView);
msgView.setText(str);
}
}}
Other advantages
● More Reusable Code
● More Readable Code
● Reduced Dependencies
Dependency Injection
Dagger
Live Coding Sample 1
Live Coding Sample 2
DAGger
Direct
Acyclic
Graph
Coffee maker
public class CoffeMaker {
@Inject Heater heater;
@Inject Pump pump;
public void brew() {
heater.on();
pump.pump();
System.out.println("coffee!");
heater.off();
}
}
class Thermosiphon implements Pump {
Heater heater;
Thermosiphon(Heater heater) {
this.heater = heater;
}
@Override public void pump() {
if (heater.isHot()) {
System.out.println("=> => pumping => =>");
}
}
Declare Dependencies
class Thermosiphon implements Pump {
Heater heater;
@Inject
Thermosiphon(Heater heater) {
this.heater = heater;
}
}
Satisfy Dependencies
@Module
class DripCoffeeModule {
@Provides Heater provideHeater() {
return new ElectricHeater();
}
@Provides Pump providePump(Thermosiphon pump) {
return pump;
}
}
Build the Graph
class CoffeeApp {
public static void main(String[] args) {
ObjectGraph objectGraph = ObjectGraph.create(new
DripCoffeeModule());
CoffeeMaker coffeeMaker = objectGraph.get(CoffeeMaker.class);
coffeeMaker.brew();
} }
Neat features
● Lazy<T>
● Module overrides
Lazy<T>
class GridingCoffeeMaker {
@Inject Lazy<Grinder> lazyGrinder;
public void brew() {
while (needsGrinding()) {
// Grinder created once and cached.
Grinder grinder = lazyGrinder.get()
grinder.grind();
}
} }
Module Overrides
@Module(
includes = DripCoffeeModule.class,
injects = CoffeeMakerTest.class,
overrides = true
)
static class TestModule {
@Provides @Singleton Heater provideHeater() {
return Mockito.mock(Heater.class);
}
}
Dependency Injection
Dagger
Live Coding Sample 1
Live Coding Sample 2
Live coding - Sample 1
● add dependencies (with Gradle)
● create module
● set up Dagger in Application context
● inject dependencies to Activity
● create Activity test which injects a mock
Add depedencies (Gradle)
dependencies {
……...
compile 'com.squareup.dagger:dagger:1.2.1'
compile 'com.squareup.dagger:dagger-compiler:1.2.1'
androidTestCompile 'org.mockito:mockito-core:1.9.5'
androidTestCompile 'com.google.dexmaker:dexmaker:1.0'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0'
}
Module
@Module(
injects = {
MyStringUtils.class, MainActivity.class })
class ProdModule {
Application application;
ProdModule(Application application){
this.application = application;
}
@Provides @Singleton
MyStringUtils provideMyStringUtils() {
return new MyStringUtils(application);
}
Define Dagger Application
class MyApplication extends Application {
ObjectGraph mGraph;
void onCreate() {
super.onCreate();
mGraph = ObjectGraph.create(getModules().toArray());
}
void inject(Object o){
mGraph.inject(o);
}
List<Object> getModules() {
List<Object> result = new ArrayList<Object>();
result.add(new ProdModule(this));
return result;
}}
Create MyStringUtils
class MyStringUtils {
MyStringUtils(Context context) {
this.context = context;
}
public String helloWorld() {
return context.getString(R.string.hello_ciklum);
}
}
Inject dependencies Activity
class MainActivity extends Activity {
@Inject
MyStringUtils myStringUtils;
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set dependencies to this activity
((MyApplication)getApplication()).inject(this);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(this);
}
Unit test Activity with mock
class MainActivityUnitTest extends ActivityUnitTestCase<MainActivity> {
@Inject
MyStringUtils myStringUtils;
void setUp() {
// create test application context, Dagger Graph with our test module.
MyApplication application = new TestApplication();
application.inject(this); // inject the dependencies we need to this class
setApplication(application); // use our custom test application context
}
void testOnClick() {
String testingStr = "olala";
when(myStringUtils.helloWorld()).thenReturn(testingStr);
this.activity = startActivity(intent, null, null);
// the test
View view = activity.findViewById(R.id.button);
activity.onClick(view);
// verify the mock was invoked
verify(myStringUtils, times(1)).helloWorld();
// assert view got updated correctly
TextView msgView = (TextView) activity.findViewById(R.id.textView);
assertEquals(testingStr, msgView.getText());
}
Dependency Injection
Dagger
Live Coding Sample 1
Live Coding Sample 2
Sample app 2
● Threads
● HTTP mocks
Tips, tricks and Frameworks
● https://github.com/tha022/dagger-testing-example
● https://github.com/fizz-buzz/fb-android-dagger

Contenu connexe

Tendances

A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo Ali Parmaksiz
 
My way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon SpainMy way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon SpainChristian Panadero
 
The Ring programming language version 1.10 book - Part 82 of 212
The Ring programming language version 1.10 book - Part 82 of 212The Ring programming language version 1.10 book - Part 82 of 212
The Ring programming language version 1.10 book - Part 82 of 212Mahmoud Samir Fayed
 
arataga. SObjectizer and RESTinio in action: a real-world example
arataga. SObjectizer and RESTinio in action: a real-world examplearataga. SObjectizer and RESTinio in action: a real-world example
arataga. SObjectizer and RESTinio in action: a real-world exampleYauheni Akhotnikau
 
Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Fabio Collini
 
Dagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionDagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionStfalcon Meetups
 
Dagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency InjectionsDagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency InjectionsGlobalLogic Ukraine
 
Selenium my sql and junit user guide
Selenium my sql and junit user guideSelenium my sql and junit user guide
Selenium my sql and junit user guideFahad Shiekh
 
Dive into SObjectizer 5.5. Eighth Part: Dispatchers
Dive into SObjectizer 5.5. Eighth Part: DispatchersDive into SObjectizer 5.5. Eighth Part: Dispatchers
Dive into SObjectizer 5.5. Eighth Part: DispatchersYauheni Akhotnikau
 
Your IDE Deserves Better
Your IDE Deserves BetterYour IDE Deserves Better
Your IDE Deserves BetterBoris Litvinsky
 
Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1Kirill Rozov
 
The Ring programming language version 1.10 book - Part 72 of 212
The Ring programming language version 1.10 book - Part 72 of 212The Ring programming language version 1.10 book - Part 72 of 212
The Ring programming language version 1.10 book - Part 72 of 212Mahmoud Samir Fayed
 
Dive into SObjectizer 5.5. Seventh part: Message Limits
Dive into SObjectizer 5.5. Seventh part: Message LimitsDive into SObjectizer 5.5. Seventh part: Message Limits
Dive into SObjectizer 5.5. Seventh part: Message LimitsYauheni Akhotnikau
 

Tendances (20)

A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo A GWT Application with MVP Pattern Deploying to CloudFoundry using  Spring Roo
A GWT Application with MVP Pattern Deploying to CloudFoundry using Spring Roo
 
My way to clean android V2
My way to clean android V2My way to clean android V2
My way to clean android V2
 
React hooks
React hooksReact hooks
React hooks
 
Devoxx 2012 (v2)
Devoxx 2012 (v2)Devoxx 2012 (v2)
Devoxx 2012 (v2)
 
Angular2 + rxjs
Angular2 + rxjsAngular2 + rxjs
Angular2 + rxjs
 
My way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon SpainMy way to clean android v2 English DroidCon Spain
My way to clean android v2 English DroidCon Spain
 
The Ring programming language version 1.10 book - Part 82 of 212
The Ring programming language version 1.10 book - Part 82 of 212The Ring programming language version 1.10 book - Part 82 of 212
The Ring programming language version 1.10 book - Part 82 of 212
 
F1
F1F1
F1
 
arataga. SObjectizer and RESTinio in action: a real-world example
arataga. SObjectizer and RESTinio in action: a real-world examplearataga. SObjectizer and RESTinio in action: a real-world example
arataga. SObjectizer and RESTinio in action: a real-world example
 
Android TDD
Android TDDAndroid TDD
Android TDD
 
Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2
 
Gwt RPC
Gwt RPCGwt RPC
Gwt RPC
 
Dagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionDagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency Injection
 
Dagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency InjectionsDagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency Injections
 
Selenium my sql and junit user guide
Selenium my sql and junit user guideSelenium my sql and junit user guide
Selenium my sql and junit user guide
 
Dive into SObjectizer 5.5. Eighth Part: Dispatchers
Dive into SObjectizer 5.5. Eighth Part: DispatchersDive into SObjectizer 5.5. Eighth Part: Dispatchers
Dive into SObjectizer 5.5. Eighth Part: Dispatchers
 
Your IDE Deserves Better
Your IDE Deserves BetterYour IDE Deserves Better
Your IDE Deserves Better
 
Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1
 
The Ring programming language version 1.10 book - Part 72 of 212
The Ring programming language version 1.10 book - Part 72 of 212The Ring programming language version 1.10 book - Part 72 of 212
The Ring programming language version 1.10 book - Part 72 of 212
 
Dive into SObjectizer 5.5. Seventh part: Message Limits
Dive into SObjectizer 5.5. Seventh part: Message LimitsDive into SObjectizer 5.5. Seventh part: Message Limits
Dive into SObjectizer 5.5. Seventh part: Message Limits
 

En vedette

Bergens første ambassade - House of Bergen @ First Tuesday Bergen
Bergens første ambassade - House of Bergen @ First Tuesday BergenBergens første ambassade - House of Bergen @ First Tuesday Bergen
Bergens første ambassade - House of Bergen @ First Tuesday BergenFirst Tuesday Bergen
 
Business Models for Space: Seed Learnings and Huge Growth @ First Tuesday Bergen
Business Models for Space: Seed Learnings and Huge Growth @ First Tuesday BergenBusiness Models for Space: Seed Learnings and Huge Growth @ First Tuesday Bergen
Business Models for Space: Seed Learnings and Huge Growth @ First Tuesday BergenFirst Tuesday Bergen
 
Crowdfunding, crowdsourcing og eksponentielle organisasjoner @ First Tuesday ...
Crowdfunding, crowdsourcing og eksponentielle organisasjoner @ First Tuesday ...Crowdfunding, crowdsourcing og eksponentielle organisasjoner @ First Tuesday ...
Crowdfunding, crowdsourcing og eksponentielle organisasjoner @ First Tuesday ...First Tuesday Bergen
 
Hvordan lykkes som gründer @ First Tuesday Bergen
Hvordan lykkes som gründer @ First Tuesday BergenHvordan lykkes som gründer @ First Tuesday Bergen
Hvordan lykkes som gründer @ First Tuesday BergenFirst Tuesday Bergen
 
Kan lukkede anlegg erstatte dagens åpne merdproduksjon i norsk fiskeoppdrett?...
Kan lukkede anlegg erstatte dagens åpne merdproduksjon i norsk fiskeoppdrett?...Kan lukkede anlegg erstatte dagens åpne merdproduksjon i norsk fiskeoppdrett?...
Kan lukkede anlegg erstatte dagens åpne merdproduksjon i norsk fiskeoppdrett?...First Tuesday Bergen
 
The mobile adventure: Bergen to Bangladesh @ First Tuesday Bergen
The mobile adventure: Bergen to Bangladesh @ First Tuesday BergenThe mobile adventure: Bergen to Bangladesh @ First Tuesday Bergen
The mobile adventure: Bergen to Bangladesh @ First Tuesday BergenFirst Tuesday Bergen
 
Case-studie på pasientmedvirkning for MS-pasienter @ First Tuesday Bergen
Case-studie på pasientmedvirkning for MS-pasienter @ First Tuesday BergenCase-studie på pasientmedvirkning for MS-pasienter @ First Tuesday Bergen
Case-studie på pasientmedvirkning for MS-pasienter @ First Tuesday BergenFirst Tuesday Bergen
 
Galskap og kreativitet @ First Tuesday Bergen
Galskap og kreativitet @ First Tuesday BergenGalskap og kreativitet @ First Tuesday Bergen
Galskap og kreativitet @ First Tuesday BergenFirst Tuesday Bergen
 
Fra værdamer til verdens ledende @ First Tuesday Bergen 4. Mars 2014
Fra værdamer til verdens ledende @ First Tuesday Bergen 4. Mars 2014Fra værdamer til verdens ledende @ First Tuesday Bergen 4. Mars 2014
Fra værdamer til verdens ledende @ First Tuesday Bergen 4. Mars 2014First Tuesday Bergen
 
Eit norsk romfartseventyr @ First Tuesday Bergen
Eit norsk romfartseventyr @ First Tuesday BergenEit norsk romfartseventyr @ First Tuesday Bergen
Eit norsk romfartseventyr @ First Tuesday BergenFirst Tuesday Bergen
 
Ekstremsport tar vindenergi til nye høgder @ First Tuesday Bergen
Ekstremsport tar vindenergi til nye høgder @ First Tuesday BergenEkstremsport tar vindenergi til nye høgder @ First Tuesday Bergen
Ekstremsport tar vindenergi til nye høgder @ First Tuesday BergenFirst Tuesday Bergen
 
Realiser de store ideene @ First Tuesday Bergen
Realiser de store ideene @ First Tuesday BergenRealiser de store ideene @ First Tuesday Bergen
Realiser de store ideene @ First Tuesday BergenFirst Tuesday Bergen
 
Outsourcing fungerer! …også i bølgegang @ First Tuesday Bergen 10 Juni 2014
Outsourcing fungerer! …også i bølgegang @ First Tuesday Bergen 10 Juni 2014Outsourcing fungerer! …også i bølgegang @ First Tuesday Bergen 10 Juni 2014
Outsourcing fungerer! …også i bølgegang @ First Tuesday Bergen 10 Juni 2014First Tuesday Bergen
 
iZettle & TicketCo: Match made in heaven?
iZettle & TicketCo: Match made in heaven?iZettle & TicketCo: Match made in heaven?
iZettle & TicketCo: Match made in heaven?First Tuesday Bergen
 
Samarbeid med helsevesenet om produktutvikling, er det mulig? @ First Tuesday...
Samarbeid med helsevesenet om produktutvikling, er det mulig? @ First Tuesday...Samarbeid med helsevesenet om produktutvikling, er det mulig? @ First Tuesday...
Samarbeid med helsevesenet om produktutvikling, er det mulig? @ First Tuesday...First Tuesday Bergen
 
Lokalt og globalt nettverk for sosial innovasjon @ First Tuesday Bergen 2. fe...
Lokalt og globalt nettverk for sosial innovasjon @ First Tuesday Bergen 2. fe...Lokalt og globalt nettverk for sosial innovasjon @ First Tuesday Bergen 2. fe...
Lokalt og globalt nettverk for sosial innovasjon @ First Tuesday Bergen 2. fe...First Tuesday Bergen
 
OGC Web Service Shibboleth Interoperability Experiment
OGC Web Service Shibboleth Interoperability ExperimentOGC Web Service Shibboleth Interoperability Experiment
OGC Web Service Shibboleth Interoperability ExperimentEDINA, University of Edinburgh
 
Northumbria University Geospatial Metadata Workshop 20110505
Northumbria University Geospatial Metadata Workshop 20110505Northumbria University Geospatial Metadata Workshop 20110505
Northumbria University Geospatial Metadata Workshop 20110505EDINA, University of Edinburgh
 
Digital Preservation Case Study: Community Action via UK LOCKSS Alliance
Digital Preservation Case Study: Community Action via UK LOCKSS AllianceDigital Preservation Case Study: Community Action via UK LOCKSS Alliance
Digital Preservation Case Study: Community Action via UK LOCKSS AllianceEDINA, University of Edinburgh
 

En vedette (20)

Bergens første ambassade - House of Bergen @ First Tuesday Bergen
Bergens første ambassade - House of Bergen @ First Tuesday BergenBergens første ambassade - House of Bergen @ First Tuesday Bergen
Bergens første ambassade - House of Bergen @ First Tuesday Bergen
 
Business Models for Space: Seed Learnings and Huge Growth @ First Tuesday Bergen
Business Models for Space: Seed Learnings and Huge Growth @ First Tuesday BergenBusiness Models for Space: Seed Learnings and Huge Growth @ First Tuesday Bergen
Business Models for Space: Seed Learnings and Huge Growth @ First Tuesday Bergen
 
Crowdfunding, crowdsourcing og eksponentielle organisasjoner @ First Tuesday ...
Crowdfunding, crowdsourcing og eksponentielle organisasjoner @ First Tuesday ...Crowdfunding, crowdsourcing og eksponentielle organisasjoner @ First Tuesday ...
Crowdfunding, crowdsourcing og eksponentielle organisasjoner @ First Tuesday ...
 
Hvordan lykkes som gründer @ First Tuesday Bergen
Hvordan lykkes som gründer @ First Tuesday BergenHvordan lykkes som gründer @ First Tuesday Bergen
Hvordan lykkes som gründer @ First Tuesday Bergen
 
Kan lukkede anlegg erstatte dagens åpne merdproduksjon i norsk fiskeoppdrett?...
Kan lukkede anlegg erstatte dagens åpne merdproduksjon i norsk fiskeoppdrett?...Kan lukkede anlegg erstatte dagens åpne merdproduksjon i norsk fiskeoppdrett?...
Kan lukkede anlegg erstatte dagens åpne merdproduksjon i norsk fiskeoppdrett?...
 
The mobile adventure: Bergen to Bangladesh @ First Tuesday Bergen
The mobile adventure: Bergen to Bangladesh @ First Tuesday BergenThe mobile adventure: Bergen to Bangladesh @ First Tuesday Bergen
The mobile adventure: Bergen to Bangladesh @ First Tuesday Bergen
 
Case-studie på pasientmedvirkning for MS-pasienter @ First Tuesday Bergen
Case-studie på pasientmedvirkning for MS-pasienter @ First Tuesday BergenCase-studie på pasientmedvirkning for MS-pasienter @ First Tuesday Bergen
Case-studie på pasientmedvirkning for MS-pasienter @ First Tuesday Bergen
 
Galskap og kreativitet @ First Tuesday Bergen
Galskap og kreativitet @ First Tuesday BergenGalskap og kreativitet @ First Tuesday Bergen
Galskap og kreativitet @ First Tuesday Bergen
 
Fra værdamer til verdens ledende @ First Tuesday Bergen 4. Mars 2014
Fra værdamer til verdens ledende @ First Tuesday Bergen 4. Mars 2014Fra værdamer til verdens ledende @ First Tuesday Bergen 4. Mars 2014
Fra værdamer til verdens ledende @ First Tuesday Bergen 4. Mars 2014
 
Eit norsk romfartseventyr @ First Tuesday Bergen
Eit norsk romfartseventyr @ First Tuesday BergenEit norsk romfartseventyr @ First Tuesday Bergen
Eit norsk romfartseventyr @ First Tuesday Bergen
 
Ekstremsport tar vindenergi til nye høgder @ First Tuesday Bergen
Ekstremsport tar vindenergi til nye høgder @ First Tuesday BergenEkstremsport tar vindenergi til nye høgder @ First Tuesday Bergen
Ekstremsport tar vindenergi til nye høgder @ First Tuesday Bergen
 
Realiser de store ideene @ First Tuesday Bergen
Realiser de store ideene @ First Tuesday BergenRealiser de store ideene @ First Tuesday Bergen
Realiser de store ideene @ First Tuesday Bergen
 
Outsourcing fungerer! …også i bølgegang @ First Tuesday Bergen 10 Juni 2014
Outsourcing fungerer! …også i bølgegang @ First Tuesday Bergen 10 Juni 2014Outsourcing fungerer! …også i bølgegang @ First Tuesday Bergen 10 Juni 2014
Outsourcing fungerer! …også i bølgegang @ First Tuesday Bergen 10 Juni 2014
 
iZettle & TicketCo: Match made in heaven?
iZettle & TicketCo: Match made in heaven?iZettle & TicketCo: Match made in heaven?
iZettle & TicketCo: Match made in heaven?
 
Samarbeid med helsevesenet om produktutvikling, er det mulig? @ First Tuesday...
Samarbeid med helsevesenet om produktutvikling, er det mulig? @ First Tuesday...Samarbeid med helsevesenet om produktutvikling, er det mulig? @ First Tuesday...
Samarbeid med helsevesenet om produktutvikling, er det mulig? @ First Tuesday...
 
Lokalt og globalt nettverk for sosial innovasjon @ First Tuesday Bergen 2. fe...
Lokalt og globalt nettverk for sosial innovasjon @ First Tuesday Bergen 2. fe...Lokalt og globalt nettverk for sosial innovasjon @ First Tuesday Bergen 2. fe...
Lokalt og globalt nettverk for sosial innovasjon @ First Tuesday Bergen 2. fe...
 
OGC Web Service Shibboleth Interoperability Experiment
OGC Web Service Shibboleth Interoperability ExperimentOGC Web Service Shibboleth Interoperability Experiment
OGC Web Service Shibboleth Interoperability Experiment
 
Bipper presentasjon first tuesday
Bipper presentasjon   first tuesdayBipper presentasjon   first tuesday
Bipper presentasjon first tuesday
 
Northumbria University Geospatial Metadata Workshop 20110505
Northumbria University Geospatial Metadata Workshop 20110505Northumbria University Geospatial Metadata Workshop 20110505
Northumbria University Geospatial Metadata Workshop 20110505
 
Digital Preservation Case Study: Community Action via UK LOCKSS Alliance
Digital Preservation Case Study: Community Action via UK LOCKSS AllianceDigital Preservation Case Study: Community Action via UK LOCKSS Alliance
Digital Preservation Case Study: Community Action via UK LOCKSS Alliance
 

Similaire à Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014

Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureC.T.Co
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalDroidcon Berlin
 
Sharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFSharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFPierre-Yves Ricau
 
Workshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideVisual Engineering
 
Sword fighting with Dagger GDG-NYC Jan 2016
 Sword fighting with Dagger GDG-NYC Jan 2016 Sword fighting with Dagger GDG-NYC Jan 2016
Sword fighting with Dagger GDG-NYC Jan 2016Mike Nakhimovich
 
Android architecture
Android architecture Android architecture
Android architecture Trong-An Bui
 
Hacking the Codename One Source Code - Part IV.pdf
Hacking the Codename One Source Code - Part IV.pdfHacking the Codename One Source Code - Part IV.pdf
Hacking the Codename One Source Code - Part IV.pdfShaiAlmog1
 
Android testing
Android testingAndroid testing
Android testingSean Tsai
 
Strategy Design Pattern
Strategy Design PatternStrategy Design Pattern
Strategy Design PatternGanesh Kolhe
 
Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02rhemsolutions
 
Diving in the Flex Data Binding Waters
Diving in the Flex Data Binding WatersDiving in the Flex Data Binding Waters
Diving in the Flex Data Binding Watersmichael.labriola
 

Similaire à Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014 (20)

Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-final
 
Sharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFSharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SF
 
Workshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native Side
 
Sword fighting with Dagger GDG-NYC Jan 2016
 Sword fighting with Dagger GDG-NYC Jan 2016 Sword fighting with Dagger GDG-NYC Jan 2016
Sword fighting with Dagger GDG-NYC Jan 2016
 
Guice2.0
Guice2.0Guice2.0
Guice2.0
 
Hilt Annotations
Hilt AnnotationsHilt Annotations
Hilt Annotations
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Android architecture
Android architecture Android architecture
Android architecture
 
Hacking the Codename One Source Code - Part IV.pdf
Hacking the Codename One Source Code - Part IV.pdfHacking the Codename One Source Code - Part IV.pdf
Hacking the Codename One Source Code - Part IV.pdf
 
Android testing
Android testingAndroid testing
Android testing
 
Strategy Design Pattern
Strategy Design PatternStrategy Design Pattern
Strategy Design Pattern
 
Ngrx meta reducers
Ngrx meta reducersNgrx meta reducers
Ngrx meta reducers
 
Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
F2
F2F2
F2
 
Unit testing with mock libs
Unit testing with mock libsUnit testing with mock libs
Unit testing with mock libs
 
droidparts
droidpartsdroidparts
droidparts
 
Diving in the Flex Data Binding Waters
Diving in the Flex Data Binding WatersDiving in the Flex Data Binding Waters
Diving in the Flex Data Binding Waters
 

Plus de First Tuesday Bergen

How to innovate with Startups, from Bank to Chatbot @ First Tuesday Bergen
How to innovate with Startups, from Bank to Chatbot @ First Tuesday BergenHow to innovate with Startups, from Bank to Chatbot @ First Tuesday Bergen
How to innovate with Startups, from Bank to Chatbot @ First Tuesday BergenFirst Tuesday Bergen
 
Start smart – for bedre teamarbeid @ First Tuesday Bergen
Start smart – for bedre teamarbeid @ First Tuesday BergenStart smart – for bedre teamarbeid @ First Tuesday Bergen
Start smart – for bedre teamarbeid @ First Tuesday BergenFirst Tuesday Bergen
 
Hvordan bruke innovasjon til å få flere til å reise kollektivt? @ First Tuesd...
Hvordan bruke innovasjon til å få flere til å reise kollektivt? @ First Tuesd...Hvordan bruke innovasjon til å få flere til å reise kollektivt? @ First Tuesd...
Hvordan bruke innovasjon til å få flere til å reise kollektivt? @ First Tuesd...First Tuesday Bergen
 
Ewave - kutter strømregningen din med 26,8% @ First Tuesday Bergen
Ewave - kutter strømregningen din med 26,8% @ First Tuesday BergenEwave - kutter strømregningen din med 26,8% @ First Tuesday Bergen
Ewave - kutter strømregningen din med 26,8% @ First Tuesday BergenFirst Tuesday Bergen
 
Reisen til grønne forretningsmuligheter @ First Tuesday Bergen
Reisen til grønne forretningsmuligheter @ First Tuesday BergenReisen til grønne forretningsmuligheter @ First Tuesday Bergen
Reisen til grønne forretningsmuligheter @ First Tuesday BergenFirst Tuesday Bergen
 
Suksess ved hjelp av mentor @ First Tuesday Bergen
Suksess ved hjelp av mentor @ First Tuesday BergenSuksess ved hjelp av mentor @ First Tuesday Bergen
Suksess ved hjelp av mentor @ First Tuesday BergenFirst Tuesday Bergen
 
Mentor, rådgiver eller samtalepartner? @ First Tuesday Bergen
Mentor, rådgiver eller samtalepartner? @ First Tuesday BergenMentor, rådgiver eller samtalepartner? @ First Tuesday Bergen
Mentor, rådgiver eller samtalepartner? @ First Tuesday BergenFirst Tuesday Bergen
 
Produksjon av stortare - Gründer forteller om sin reise @ First Tuesday Bergen
Produksjon av stortare - Gründer forteller om sin reise @ First Tuesday BergenProduksjon av stortare - Gründer forteller om sin reise @ First Tuesday Bergen
Produksjon av stortare - Gründer forteller om sin reise @ First Tuesday BergenFirst Tuesday Bergen
 
Innovasjon Norge sitt beste gründertilbud? @ First Tuesday Bergen
Innovasjon Norge sitt beste gründertilbud? @ First Tuesday BergenInnovasjon Norge sitt beste gründertilbud? @ First Tuesday Bergen
Innovasjon Norge sitt beste gründertilbud? @ First Tuesday BergenFirst Tuesday Bergen
 
Hvordan vurdere investeringsmuligheter i tidlig fase @ First Tuesday Bergen
Hvordan vurdere investeringsmuligheter i tidlig fase @ First Tuesday BergenHvordan vurdere investeringsmuligheter i tidlig fase @ First Tuesday Bergen
Hvordan vurdere investeringsmuligheter i tidlig fase @ First Tuesday BergenFirst Tuesday Bergen
 
Quantfolio - Lager programvare som gir investeringsråd basert på kunstig inte...
Quantfolio - Lager programvare som gir investeringsråd basert på kunstig inte...Quantfolio - Lager programvare som gir investeringsråd basert på kunstig inte...
Quantfolio - Lager programvare som gir investeringsråd basert på kunstig inte...First Tuesday Bergen
 
WA - Jobbplattform som kobler bedrifter med talenter @ First Tuesday Bergen
WA - Jobbplattform som kobler bedrifter med talenter @ First Tuesday BergenWA - Jobbplattform som kobler bedrifter med talenter @ First Tuesday Bergen
WA - Jobbplattform som kobler bedrifter med talenter @ First Tuesday BergenFirst Tuesday Bergen
 
ProWellPlan - Automatisering av planlegging av boreoperasjoner @ First Tuesda...
ProWellPlan - Automatisering av planlegging av boreoperasjoner @ First Tuesda...ProWellPlan - Automatisering av planlegging av boreoperasjoner @ First Tuesda...
ProWellPlan - Automatisering av planlegging av boreoperasjoner @ First Tuesda...First Tuesday Bergen
 
Sobo Community - Lager europeisk nettbutikk for vintage klær @ First Tuesday ...
Sobo Community - Lager europeisk nettbutikk for vintage klær @ First Tuesday ...Sobo Community - Lager europeisk nettbutikk for vintage klær @ First Tuesday ...
Sobo Community - Lager europeisk nettbutikk for vintage klær @ First Tuesday ...First Tuesday Bergen
 
CeoBas - Nye løsninger for ballasthåndtering på skip @ First Tuesday Bergen
CeoBas - Nye løsninger for ballasthåndtering på skip @ First Tuesday BergenCeoBas - Nye løsninger for ballasthåndtering på skip @ First Tuesday Bergen
CeoBas - Nye løsninger for ballasthåndtering på skip @ First Tuesday BergenFirst Tuesday Bergen
 
Mecu - lager et digitalt verktøy som håndterer papirarbeidet ved sykdom og dø...
Mecu - lager et digitalt verktøy som håndterer papirarbeidet ved sykdom og dø...Mecu - lager et digitalt verktøy som håndterer papirarbeidet ved sykdom og dø...
Mecu - lager et digitalt verktøy som håndterer papirarbeidet ved sykdom og dø...First Tuesday Bergen
 
Jet Seafood - Lager ny handelsplattform for sjømat @ First Tuesday Bergen
Jet Seafood - Lager ny handelsplattform for sjømat @ First Tuesday BergenJet Seafood - Lager ny handelsplattform for sjømat @ First Tuesday Bergen
Jet Seafood - Lager ny handelsplattform for sjømat @ First Tuesday BergenFirst Tuesday Bergen
 

Plus de First Tuesday Bergen (20)

How to innovate with Startups, from Bank to Chatbot @ First Tuesday Bergen
How to innovate with Startups, from Bank to Chatbot @ First Tuesday BergenHow to innovate with Startups, from Bank to Chatbot @ First Tuesday Bergen
How to innovate with Startups, from Bank to Chatbot @ First Tuesday Bergen
 
Start smart – for bedre teamarbeid @ First Tuesday Bergen
Start smart – for bedre teamarbeid @ First Tuesday BergenStart smart – for bedre teamarbeid @ First Tuesday Bergen
Start smart – for bedre teamarbeid @ First Tuesday Bergen
 
Hvordan bruke innovasjon til å få flere til å reise kollektivt? @ First Tuesd...
Hvordan bruke innovasjon til å få flere til å reise kollektivt? @ First Tuesd...Hvordan bruke innovasjon til å få flere til å reise kollektivt? @ First Tuesd...
Hvordan bruke innovasjon til å få flere til å reise kollektivt? @ First Tuesd...
 
Ewave - kutter strømregningen din med 26,8% @ First Tuesday Bergen
Ewave - kutter strømregningen din med 26,8% @ First Tuesday BergenEwave - kutter strømregningen din med 26,8% @ First Tuesday Bergen
Ewave - kutter strømregningen din med 26,8% @ First Tuesday Bergen
 
Reisen til grønne forretningsmuligheter @ First Tuesday Bergen
Reisen til grønne forretningsmuligheter @ First Tuesday BergenReisen til grønne forretningsmuligheter @ First Tuesday Bergen
Reisen til grønne forretningsmuligheter @ First Tuesday Bergen
 
Suksess ved hjelp av mentor @ First Tuesday Bergen
Suksess ved hjelp av mentor @ First Tuesday BergenSuksess ved hjelp av mentor @ First Tuesday Bergen
Suksess ved hjelp av mentor @ First Tuesday Bergen
 
Mentor, rådgiver eller samtalepartner? @ First Tuesday Bergen
Mentor, rådgiver eller samtalepartner? @ First Tuesday BergenMentor, rådgiver eller samtalepartner? @ First Tuesday Bergen
Mentor, rådgiver eller samtalepartner? @ First Tuesday Bergen
 
Produksjon av stortare - Gründer forteller om sin reise @ First Tuesday Bergen
Produksjon av stortare - Gründer forteller om sin reise @ First Tuesday BergenProduksjon av stortare - Gründer forteller om sin reise @ First Tuesday Bergen
Produksjon av stortare - Gründer forteller om sin reise @ First Tuesday Bergen
 
Innovasjon Norge sitt beste gründertilbud? @ First Tuesday Bergen
Innovasjon Norge sitt beste gründertilbud? @ First Tuesday BergenInnovasjon Norge sitt beste gründertilbud? @ First Tuesday Bergen
Innovasjon Norge sitt beste gründertilbud? @ First Tuesday Bergen
 
Hvordan vurdere investeringsmuligheter i tidlig fase @ First Tuesday Bergen
Hvordan vurdere investeringsmuligheter i tidlig fase @ First Tuesday BergenHvordan vurdere investeringsmuligheter i tidlig fase @ First Tuesday Bergen
Hvordan vurdere investeringsmuligheter i tidlig fase @ First Tuesday Bergen
 
Quantfolio - Lager programvare som gir investeringsråd basert på kunstig inte...
Quantfolio - Lager programvare som gir investeringsråd basert på kunstig inte...Quantfolio - Lager programvare som gir investeringsråd basert på kunstig inte...
Quantfolio - Lager programvare som gir investeringsråd basert på kunstig inte...
 
WA - Jobbplattform som kobler bedrifter med talenter @ First Tuesday Bergen
WA - Jobbplattform som kobler bedrifter med talenter @ First Tuesday BergenWA - Jobbplattform som kobler bedrifter med talenter @ First Tuesday Bergen
WA - Jobbplattform som kobler bedrifter med talenter @ First Tuesday Bergen
 
ProWellPlan - Automatisering av planlegging av boreoperasjoner @ First Tuesda...
ProWellPlan - Automatisering av planlegging av boreoperasjoner @ First Tuesda...ProWellPlan - Automatisering av planlegging av boreoperasjoner @ First Tuesda...
ProWellPlan - Automatisering av planlegging av boreoperasjoner @ First Tuesda...
 
Sobo Community - Lager europeisk nettbutikk for vintage klær @ First Tuesday ...
Sobo Community - Lager europeisk nettbutikk for vintage klær @ First Tuesday ...Sobo Community - Lager europeisk nettbutikk for vintage klær @ First Tuesday ...
Sobo Community - Lager europeisk nettbutikk for vintage klær @ First Tuesday ...
 
CeoBas - Nye løsninger for ballasthåndtering på skip @ First Tuesday Bergen
CeoBas - Nye løsninger for ballasthåndtering på skip @ First Tuesday BergenCeoBas - Nye løsninger for ballasthåndtering på skip @ First Tuesday Bergen
CeoBas - Nye løsninger for ballasthåndtering på skip @ First Tuesday Bergen
 
Mecu - lager et digitalt verktøy som håndterer papirarbeidet ved sykdom og dø...
Mecu - lager et digitalt verktøy som håndterer papirarbeidet ved sykdom og dø...Mecu - lager et digitalt verktøy som håndterer papirarbeidet ved sykdom og dø...
Mecu - lager et digitalt verktøy som håndterer papirarbeidet ved sykdom og dø...
 
Jet Seafood - Lager ny handelsplattform for sjømat @ First Tuesday Bergen
Jet Seafood - Lager ny handelsplattform for sjømat @ First Tuesday BergenJet Seafood - Lager ny handelsplattform for sjømat @ First Tuesday Bergen
Jet Seafood - Lager ny handelsplattform for sjømat @ First Tuesday Bergen
 
Meet Market Gravity
Meet Market GravityMeet Market Gravity
Meet Market Gravity
 
Bergen in Bergen - Løsning Lag 1
Bergen in Bergen - Løsning Lag 1Bergen in Bergen - Løsning Lag 1
Bergen in Bergen - Løsning Lag 1
 
Bergen in Bergen - Løsning Lag 2
Bergen in Bergen - Løsning Lag 2Bergen in Bergen - Løsning Lag 2
Bergen in Bergen - Løsning Lag 2
 

Dernier

Introduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaIntroduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaOmar Fathy
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptDineshKumar4165
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTbhaskargani46
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VDineshKumar4165
 
Hospital management system project report.pdf
Hospital management system project report.pdfHospital management system project report.pdf
Hospital management system project report.pdfKamal Acharya
 
A Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna MunicipalityA Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna MunicipalityMorshed Ahmed Rahath
 
School management system project Report.pdf
School management system project Report.pdfSchool management system project Report.pdf
School management system project Report.pdfKamal Acharya
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Arindam Chakraborty, Ph.D., P.E. (CA, TX)
 
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKARHAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKARKOUSTAV SARKAR
 
1_Introduction + EAM Vocabulary + how to navigate in EAM.pdf
1_Introduction + EAM Vocabulary + how to navigate in EAM.pdf1_Introduction + EAM Vocabulary + how to navigate in EAM.pdf
1_Introduction + EAM Vocabulary + how to navigate in EAM.pdfAldoGarca30
 
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptxS1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptxSCMS School of Architecture
 
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
COST-EFFETIVE  and Energy Efficient BUILDINGS ptxCOST-EFFETIVE  and Energy Efficient BUILDINGS ptx
COST-EFFETIVE and Energy Efficient BUILDINGS ptxJIT KUMAR GUPTA
 
GEAR TRAIN- BASIC CONCEPTS AND WORKING PRINCIPLE
GEAR TRAIN- BASIC CONCEPTS AND WORKING PRINCIPLEGEAR TRAIN- BASIC CONCEPTS AND WORKING PRINCIPLE
GEAR TRAIN- BASIC CONCEPTS AND WORKING PRINCIPLEselvakumar948
 
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptxHOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptxSCMS School of Architecture
 
Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . pptDineshKumar4165
 
Moment Distribution Method For Btech Civil
Moment Distribution Method For Btech CivilMoment Distribution Method For Btech Civil
Moment Distribution Method For Btech CivilVinayVitekari
 
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best ServiceTamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Servicemeghakumariji156
 
PE 459 LECTURE 2- natural gas basic concepts and properties
PE 459 LECTURE 2- natural gas basic concepts and propertiesPE 459 LECTURE 2- natural gas basic concepts and properties
PE 459 LECTURE 2- natural gas basic concepts and propertiessarkmank1
 
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...Amil baba
 

Dernier (20)

Introduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaIntroduction to Serverless with AWS Lambda
Introduction to Serverless with AWS Lambda
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.ppt
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPT
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - V
 
Hospital management system project report.pdf
Hospital management system project report.pdfHospital management system project report.pdf
Hospital management system project report.pdf
 
A Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna MunicipalityA Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna Municipality
 
Call Girls in South Ex (delhi) call me [🔝9953056974🔝] escort service 24X7
Call Girls in South Ex (delhi) call me [🔝9953056974🔝] escort service 24X7Call Girls in South Ex (delhi) call me [🔝9953056974🔝] escort service 24X7
Call Girls in South Ex (delhi) call me [🔝9953056974🔝] escort service 24X7
 
School management system project Report.pdf
School management system project Report.pdfSchool management system project Report.pdf
School management system project Report.pdf
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
 
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKARHAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
 
1_Introduction + EAM Vocabulary + how to navigate in EAM.pdf
1_Introduction + EAM Vocabulary + how to navigate in EAM.pdf1_Introduction + EAM Vocabulary + how to navigate in EAM.pdf
1_Introduction + EAM Vocabulary + how to navigate in EAM.pdf
 
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptxS1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
 
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
COST-EFFETIVE  and Energy Efficient BUILDINGS ptxCOST-EFFETIVE  and Energy Efficient BUILDINGS ptx
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
 
GEAR TRAIN- BASIC CONCEPTS AND WORKING PRINCIPLE
GEAR TRAIN- BASIC CONCEPTS AND WORKING PRINCIPLEGEAR TRAIN- BASIC CONCEPTS AND WORKING PRINCIPLE
GEAR TRAIN- BASIC CONCEPTS AND WORKING PRINCIPLE
 
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptxHOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
 
Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . ppt
 
Moment Distribution Method For Btech Civil
Moment Distribution Method For Btech CivilMoment Distribution Method For Btech Civil
Moment Distribution Method For Btech Civil
 
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best ServiceTamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
 
PE 459 LECTURE 2- natural gas basic concepts and properties
PE 459 LECTURE 2- natural gas basic concepts and propertiesPE 459 LECTURE 2- natural gas basic concepts and properties
PE 459 LECTURE 2- natural gas basic concepts and properties
 
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
NO1 Top No1 Amil Baba In Azad Kashmir, Kashmir Black Magic Specialist Expert ...
 

Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014

  • 2. Dependency Injection Dagger Live Coding Sample 1 Live Coding Sample 2
  • 4. Why not automated tests on mobile?
  • 5. Motivation for Dependency Injection ● Decouple concrete from concrete ● Uniformity ● Reduced Dependency Carrying ● More Testable Code
  • 6. Decouple concrete from Concrete class MyStringUtils { private Context context; StringUtils(Context context) { this.context = context; } public String helloWorld() { return context.getString(R.string.hello_ciklum); } }
  • 7. Decouple concrete from Concrete class MainActivity extends Activity implements View.OnClickListener { @Inject MyStringUtils myStringUtils; void onCreate(Bundle savedInstanceState) { … } void onClick(View v) { MyStringUtils myStringUtils1 = new MyStringUtils(this.getApplication()); // new operator MyStringUtils myStringUtils2 = MyStringUtils.getInstance(this); // singleton pattern MyStringUtils myStringUtils3 = MyStringUtilsFactory.getInstance(this); // factory patterns String str1 myStr = MyStringUtils.helloWorld(this); // Static String str = myStringUtils.helloWorld(); TextView msgView = (TextView) findViewById(R.id.textView); msgView.setText(str); }}}
  • 8. Uniformity class MainActivity extends Activity implements View.OnClickListener { @Inject MyStringUtils myStringUtils; void onCreate(Bundle savedInstanceState) { … } void onClick(View v) { MyStringUtils myStringUtils1 = new MyStringUtils(this.getApplication()); // new instance MyStringUtils myStringUtils2 = MyStringUtils.getInstance(this); // Singleton pattern MyStringUtils myStringUtils3 = MyStringUtilsFactory.getInstance(this); // Factory pattern String str1 myStr = MyStringUtils.helloWorld(this); // Static String str = myStringUtils.helloWorld(); TextView msgView = (TextView) findViewById(R.id.textView); msgView.setText(str); } }}
  • 9. Dependency Carrying class MyActivity extends Activity { onClick(View v) { A a = new A(this); a.doSometing(); } } class A { Context mContext; public (Context mContext){ this.mContext = mContext; } public doSomething() { B b = new B(mContext); String str = b.getSomeString(R.strings.helloWorld); } } class B { Context mContext; public B(Context mContext) { this.mContext = mContext; } public String getSomeString(int resourceId) { return mContext.getString(resourceId); } }
  • 10. Reduced Dependency Carrying @Module class ProdModule { Context mContext; public ProdModule(Context mContext) { this.mContext = mContext; } @Provide B provideB() { return new B(context); } @Provide A provideA(B b) { return new A(b); } } class MyActivity { @Inject A a; onCreate(){ ((MyApplication)getApplication()).inject(this); } onClick(View v) { A a = new A(this); a.doSomething(); } } class A { @Inject B b; public doSomething() { String str = b.getSomeString(R.strings.helloWorld); } } class B { Context mContext; public B(Context mContext) { this.mContext = mContext; } public String getSomeString(int resourceId) { return mContext.getString(resourceId); } }
  • 11. More Testable Code class MainActivity extends Activity implements View.OnClickListener { @Inject MyStringUtils myStringUtils; void onCreate(Bundle savedInstanceState) { … } void onClick(View v) { String str = myStringUtils.helloWorld(); TextView msgView = (TextView) findViewById(R.id.textView); msgView.setText(str); } }}
  • 12. Other advantages ● More Reusable Code ● More Readable Code ● Reduced Dependencies
  • 13. Dependency Injection Dagger Live Coding Sample 1 Live Coding Sample 2
  • 15. Coffee maker public class CoffeMaker { @Inject Heater heater; @Inject Pump pump; public void brew() { heater.on(); pump.pump(); System.out.println("coffee!"); heater.off(); } }
  • 16. class Thermosiphon implements Pump { Heater heater; Thermosiphon(Heater heater) { this.heater = heater; } @Override public void pump() { if (heater.isHot()) { System.out.println("=> => pumping => =>"); } }
  • 17. Declare Dependencies class Thermosiphon implements Pump { Heater heater; @Inject Thermosiphon(Heater heater) { this.heater = heater; } }
  • 18. Satisfy Dependencies @Module class DripCoffeeModule { @Provides Heater provideHeater() { return new ElectricHeater(); } @Provides Pump providePump(Thermosiphon pump) { return pump; } }
  • 19. Build the Graph class CoffeeApp { public static void main(String[] args) { ObjectGraph objectGraph = ObjectGraph.create(new DripCoffeeModule()); CoffeeMaker coffeeMaker = objectGraph.get(CoffeeMaker.class); coffeeMaker.brew(); } }
  • 20. Neat features ● Lazy<T> ● Module overrides
  • 21. Lazy<T> class GridingCoffeeMaker { @Inject Lazy<Grinder> lazyGrinder; public void brew() { while (needsGrinding()) { // Grinder created once and cached. Grinder grinder = lazyGrinder.get() grinder.grind(); } } }
  • 22. Module Overrides @Module( includes = DripCoffeeModule.class, injects = CoffeeMakerTest.class, overrides = true ) static class TestModule { @Provides @Singleton Heater provideHeater() { return Mockito.mock(Heater.class); } }
  • 23. Dependency Injection Dagger Live Coding Sample 1 Live Coding Sample 2
  • 24. Live coding - Sample 1 ● add dependencies (with Gradle) ● create module ● set up Dagger in Application context ● inject dependencies to Activity ● create Activity test which injects a mock
  • 25. Add depedencies (Gradle) dependencies { ……... compile 'com.squareup.dagger:dagger:1.2.1' compile 'com.squareup.dagger:dagger-compiler:1.2.1' androidTestCompile 'org.mockito:mockito-core:1.9.5' androidTestCompile 'com.google.dexmaker:dexmaker:1.0' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0' }
  • 26. Module @Module( injects = { MyStringUtils.class, MainActivity.class }) class ProdModule { Application application; ProdModule(Application application){ this.application = application; } @Provides @Singleton MyStringUtils provideMyStringUtils() { return new MyStringUtils(application); }
  • 27. Define Dagger Application class MyApplication extends Application { ObjectGraph mGraph; void onCreate() { super.onCreate(); mGraph = ObjectGraph.create(getModules().toArray()); } void inject(Object o){ mGraph.inject(o); } List<Object> getModules() { List<Object> result = new ArrayList<Object>(); result.add(new ProdModule(this)); return result; }}
  • 28. Create MyStringUtils class MyStringUtils { MyStringUtils(Context context) { this.context = context; } public String helloWorld() { return context.getString(R.string.hello_ciklum); } }
  • 29. Inject dependencies Activity class MainActivity extends Activity { @Inject MyStringUtils myStringUtils; void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // set dependencies to this activity ((MyApplication)getApplication()).inject(this); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(this); }
  • 30. Unit test Activity with mock class MainActivityUnitTest extends ActivityUnitTestCase<MainActivity> { @Inject MyStringUtils myStringUtils; void setUp() { // create test application context, Dagger Graph with our test module. MyApplication application = new TestApplication(); application.inject(this); // inject the dependencies we need to this class setApplication(application); // use our custom test application context } void testOnClick() { String testingStr = "olala"; when(myStringUtils.helloWorld()).thenReturn(testingStr); this.activity = startActivity(intent, null, null); // the test View view = activity.findViewById(R.id.button); activity.onClick(view); // verify the mock was invoked verify(myStringUtils, times(1)).helloWorld(); // assert view got updated correctly TextView msgView = (TextView) activity.findViewById(R.id.textView); assertEquals(testingStr, msgView.getText()); }
  • 31. Dependency Injection Dagger Live Coding Sample 1 Live Coding Sample 2
  • 32. Sample app 2 ● Threads ● HTTP mocks
  • 33. Tips, tricks and Frameworks ● https://github.com/tha022/dagger-testing-example ● https://github.com/fizz-buzz/fb-android-dagger

Notes de l'éditeur

  1. So we gonna build a sample app which shows: 1) how to set up the object graph in Application context. 2) how inject dependencies into an Activity 3) when clicking button, spin off a background thread which makes an HTTP request and show the request in view 4) build test module which mocks the HTTP client 5) create ActivityUnitTest which loads the Test module and injects the HTTP client