SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

MANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTING
MANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTINGMANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTING
MANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTINGSIVASHANKAR N
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Dr.Costas Sachpazis
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escortsranjana rawat
 
Introduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxIntroduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxupamatechverse
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...roncy bisnoi
 
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Dr.Costas Sachpazis
 
Processing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxProcessing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxpranjaldaimarysona
 
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur EscortsRussian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...ranjana rawat
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxfenichawla
 
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduitsrknatarajan
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSISrknatarajan
 
Online banking management system project.pdf
Online banking management system project.pdfOnline banking management system project.pdf
Online banking management system project.pdfKamal Acharya
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxAsutosh Ranjan
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingrakeshbaidya232001
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college projectTonystark477637
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordAsst.prof M.Gokilavani
 

Kürzlich hochgeladen (20)

MANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTING
MANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTINGMANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTING
MANUFACTURING PROCESS-II UNIT-1 THEORY OF METAL CUTTING
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
 
Introduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxIntroduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptx
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
 
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
 
Processing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxProcessing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptx
 
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur EscortsRussian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
 
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduits
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
Online banking management system project.pdf
Online banking management system project.pdfOnline banking management system project.pdf
Online banking management system project.pdf
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptx
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writing
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college project
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 

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

Hinweis der Redaktion

  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