How do I mock a class with expresso in android?

251 Views Asked by At

Hello I am struggling with a task that seems very simple. I need to write an expresso unit test but I need the activity to use a mocked class instead of the one it uses during the normal run.

the, the closest solution I saw was here:

Nullifying or overriding API calls made in an Activity under an Espresso test

But this requires getters and setters at the application level and only deals with constants.

Here is a simple example of want to do:

Activity:

public class MainActivity2 extends AppCompatActivity {

    // how do I mock this without using any branches
    // just have expresso replace with MainActivity2CustomClass with a mock?
    private MainActivity2CustomClass mainActivity2CustomClass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        mainActivity2CustomClass = new MainActivity2CustomClass();
        mainActivity2CustomClass.foo();
    }
}

the class I want to mock

// Need expresso to replace this class with a mock
public class MainActivity2CustomClass {
    void foo() {
    }
}

To clarify I need to do this with a large application with several classes. So using branches is NOT the solution I seek. For instance this will not work for my application

    // I DO ***NOT** WANT THIS solution since it will explode in many branches in my application
    Intent intent = new Intent(targetContext, PatientActivity.class);
    intent.putExtra("istestrunning", 2);

    // etc...
    // Not acceptable solution for my problem, creates too many branches and messy code
    if (getIntent().getIntExtra("istestrunning", 0) == 2) {
        mainActivity2CustomClass = new MainActivity2CustomClass();
        mainActivity2CustomClass.foo();
    } else {
        mainActivity2CustomClass2 = new MyMock();
        mainActivity2CustomClass2.foo();
    }

I want to know if it possible to have expresso simply replace that class at testing time. Can it be done?

Any help or leads is appreciated.

thank you.

0

There are 0 best solutions below