android - Robolectric app testing with Firebase -


i'm trying write simple robolectric test presenter, uses firebase database , firebase auth. every time i'm trying start test, throwes illegalstateexception.

java.lang.illegalstateexception: firebaseapp name [default] doesn't exist.      @ com.google.firebase.firebaseapp.getinstance(unknown source)     @ com.google.firebase.firebaseapp.getinstance(unknown source)     @ com.google.firebase.auth.firebaseauth.getinstance(unknown source) 

my test quite simple

@runwith(robolectrictestrunner.class) @config(constants = buildconfig.class) public class loginpresentertest {     private loginpresenter presenter;     private loginmvpview view;      @before     public void beforeeachtest() {         presenter = new loginpresenter();         view = new loginfragment();     }      @test     public void attachview_shouldattachviewtothepresenter() {         presenter.attachview(view);         assertsame(presenter.getmvpview(), view);     } } 

while in presenter constructor firebase instances.

public loginpresenter() {         this.firebaseauth = firebaseauth.getinstance();         this.database = firebasedatabase.getinstance().getreference();     } 

is there way use robolectric firebase?

if don't use them in code test possible inject them constructor:

public loginpresenter(firebaseauth firebaseauth, firebasedatabase database){     this.firebaseauth = firebaseauth;     this.database = database; } 

and inject null them, remember poor way using null. better way use library mockito or use interfaces/wrapper etc.

e.g. use interface

public interface idatabase {     public list<string> getdata(); } 

the loginpresenter:

public loginpresenter(firebaseauth firebaseauth, idatabase database){     this.firebaseauth = firebaseauth;     this.database = database; } 

the normal implementation of idatabase:

public class mydatabase implements idatabase {      private firebasedatabase database;      public mydatabase(firebasedatabase database) {         this.database = database;     }      public list<string> getdate() {         // use firebasedatabase returning getdata         return ...;     } } 

and easy mock database using idatabase:

public class databasemock implements idatabase {     public list<string> getdata() {         // return expected data mock         return ...;     } } 

call test like:

 presenter = new loginpresenter(firebaseauth.getinstance(), new databasemock()); 

Comments

Popular posts from this blog

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project.Error occurred in starting fork -

windows - Debug iNetMgr.exe unhandle exception System.Management.Automation.CmdletInvocationException -

configurationsection - activeMq-5.13.3 setup configurations for wildfly 10.0.0 -