Randroid
Randroid

Reputation: 3698

Robotium testcase

I have a Robotium test case and It should be like

How to keep track of uploading the data at background? can we use multithreading for this?

 try {
        mSolo.clickOnMenuItem("UPLOAD");
        mSolo.sleep(1000);
        Instrumentation inst = new Instrumentation();
        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
        mSolo.waitForActivity(Settings.ACTION_APPLICATION_SETTINGS);
        mSolo.goBack();
        mSolo.assertCurrentActivity("main",
                UIActivity.class);

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Is this code correct? If not suggest me a modification or correct code.

Help is always appreciated,

Thanks

Upvotes: 0

Views: 262

Answers (2)

Trinimon
Trinimon

Reputation: 13967

You cannot interact with other applications unless you signed the third party application with your own key (see black box testing).

But what you can is pressing Home, Back and starting Intents. The following code is untested but hopefully gives you an idea:

try {
    mSolo.clickOnMenuItem("UPLOAD"); // start upload
    mSolo.sleep(1000);
    mSolo.goBack(); // leave app
    ...
    Intent intent = new Intent("com.company.another.app.SomeActivity");
    startActivity(inent); // start another app
    ...
    // option one: get app context and use it for access on preferences, etc.
    Context context = this.getInstrumentation().getTargetContext().getApplicationContext();  
    // option two: wait for logs that you write while uploading     
    solo.waitForLogMessage("Upload completed");
    ...
    Intent intent = new Intent("com.myapp.MyMainUIActivity");
    startActivity(inent); // start own Main Activity again
    ...
} catch (Exception e) {
    e.printStackTrace();
}

So you could use log messages, preferences or any other methods of your app in order to follow up the upload progress.

Upvotes: 1

maszter
maszter

Reputation: 3720

You cannot leave your application and run it again with Instrumentation. This part is not correct:

Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

Why do you create new instrumentation? You can simply run:

getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

by the way, solo.goBack() just does it, so it doesn't make sense to call it with instrumentation. I would simply rewrite it to:

try {
    mSolo.clickOnMenuItem("UPLOAD");
    mSolo.sleep(1000);
    mSolo.goBack();
    assertTrue(mSolo.waitForActivity(Settings.ACTION_APPLICATION_SETTINGS));
    mSolo.goBack();
    mSolo.assertCurrentActivity("main", UIActivity.class);
} catch (Exception e) {
    e.printStackTrace();
}

Upvotes: 0

Related Questions