How to convert Android SingleLaunchActivityTestCase to ActivityTestRule? (Instrumentation unit test)
The documentation for SingleLaunchActivityTestCase
says that this class is now deprecated, and it should be replaced with ActivityTestRule
. But how is this done?
SingleLaunchActivityTestCase
allowed an Activity to launch once and keep it open; then multiple tests can run during this time, then the Activity is closed. ActivityTestRule
does not seem to have this functionality - it always relaunches the Activity for each @Test method.
So is it possible to make ActivityTestRule
launch an Activity once and keep it open, and how do I ensure the context
(from activityTestRule.getActivity()
) is not null for each @Test
function?
Example code here.
android unit-testing junit android-testing android-instrumentation
add a comment |
The documentation for SingleLaunchActivityTestCase
says that this class is now deprecated, and it should be replaced with ActivityTestRule
. But how is this done?
SingleLaunchActivityTestCase
allowed an Activity to launch once and keep it open; then multiple tests can run during this time, then the Activity is closed. ActivityTestRule
does not seem to have this functionality - it always relaunches the Activity for each @Test method.
So is it possible to make ActivityTestRule
launch an Activity once and keep it open, and how do I ensure the context
(from activityTestRule.getActivity()
) is not null for each @Test
function?
Example code here.
android unit-testing junit android-testing android-instrumentation
add a comment |
The documentation for SingleLaunchActivityTestCase
says that this class is now deprecated, and it should be replaced with ActivityTestRule
. But how is this done?
SingleLaunchActivityTestCase
allowed an Activity to launch once and keep it open; then multiple tests can run during this time, then the Activity is closed. ActivityTestRule
does not seem to have this functionality - it always relaunches the Activity for each @Test method.
So is it possible to make ActivityTestRule
launch an Activity once and keep it open, and how do I ensure the context
(from activityTestRule.getActivity()
) is not null for each @Test
function?
Example code here.
android unit-testing junit android-testing android-instrumentation
The documentation for SingleLaunchActivityTestCase
says that this class is now deprecated, and it should be replaced with ActivityTestRule
. But how is this done?
SingleLaunchActivityTestCase
allowed an Activity to launch once and keep it open; then multiple tests can run during this time, then the Activity is closed. ActivityTestRule
does not seem to have this functionality - it always relaunches the Activity for each @Test method.
So is it possible to make ActivityTestRule
launch an Activity once and keep it open, and how do I ensure the context
(from activityTestRule.getActivity()
) is not null for each @Test
function?
Example code here.
android unit-testing junit android-testing android-instrumentation
android unit-testing junit android-testing android-instrumentation
asked Sep 21 '18 at 12:55
Mr-IDE
1,97211630
1,97211630
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Use the constructor that does not start the activity by default (setting the launchActivity
argument to false
). Then use launchActivity()
in your setup, but not in each test method. This way you will start it up once yourself, but each test will operate on the same instance.
You'll probably want to also explicitly finish the activity at the end of the test class, for cleanup.
Note: This isn't generally a best practice for testing though, since tests could depend on each other (which isn't a good idea), or provide incorrect results depending on the order they run, etc. since the activity state is persisted from one test to the next in this case.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52444272%2fhow-to-convert-android-singlelaunchactivitytestcase-to-activitytestrule-instru%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Use the constructor that does not start the activity by default (setting the launchActivity
argument to false
). Then use launchActivity()
in your setup, but not in each test method. This way you will start it up once yourself, but each test will operate on the same instance.
You'll probably want to also explicitly finish the activity at the end of the test class, for cleanup.
Note: This isn't generally a best practice for testing though, since tests could depend on each other (which isn't a good idea), or provide incorrect results depending on the order they run, etc. since the activity state is persisted from one test to the next in this case.
add a comment |
Use the constructor that does not start the activity by default (setting the launchActivity
argument to false
). Then use launchActivity()
in your setup, but not in each test method. This way you will start it up once yourself, but each test will operate on the same instance.
You'll probably want to also explicitly finish the activity at the end of the test class, for cleanup.
Note: This isn't generally a best practice for testing though, since tests could depend on each other (which isn't a good idea), or provide incorrect results depending on the order they run, etc. since the activity state is persisted from one test to the next in this case.
add a comment |
Use the constructor that does not start the activity by default (setting the launchActivity
argument to false
). Then use launchActivity()
in your setup, but not in each test method. This way you will start it up once yourself, but each test will operate on the same instance.
You'll probably want to also explicitly finish the activity at the end of the test class, for cleanup.
Note: This isn't generally a best practice for testing though, since tests could depend on each other (which isn't a good idea), or provide incorrect results depending on the order they run, etc. since the activity state is persisted from one test to the next in this case.
Use the constructor that does not start the activity by default (setting the launchActivity
argument to false
). Then use launchActivity()
in your setup, but not in each test method. This way you will start it up once yourself, but each test will operate on the same instance.
You'll probably want to also explicitly finish the activity at the end of the test class, for cleanup.
Note: This isn't generally a best practice for testing though, since tests could depend on each other (which isn't a good idea), or provide incorrect results depending on the order they run, etc. since the activity state is persisted from one test to the next in this case.
answered Dec 27 '18 at 22:08
Jon Adams
19k1464105
19k1464105
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52444272%2fhow-to-convert-android-singlelaunchactivitytestcase-to-activitytestrule-instru%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown