Robolectric hanging in some instances with Android databinding
I've already raised an issue for Robolectric, but have had no response there, so perhaps SO can help me. We've a large app that uses Android Data Binding, and it currently on the rather old com.android.tools.build:gradle:2.1.3. We have Robolectric 3.8 tests that currently all work ok. We want to upgrade to a modern com.android.tools.build:gradle but when we do, some of our tests start to hang. There seems to be a particular way we're using data binding that is causing this, but outside of Robolectric it's all working ok. I've created a stripped-down sample app that shows the same issue, which is here. As there's a lot of magic that happens as part of Robolectric, and a lot of magic that happens as part of Data Binding, it makes it particularly hard to follow exactly what's going wrong. Help!
add a comment |
I've already raised an issue for Robolectric, but have had no response there, so perhaps SO can help me. We've a large app that uses Android Data Binding, and it currently on the rather old com.android.tools.build:gradle:2.1.3. We have Robolectric 3.8 tests that currently all work ok. We want to upgrade to a modern com.android.tools.build:gradle but when we do, some of our tests start to hang. There seems to be a particular way we're using data binding that is causing this, but outside of Robolectric it's all working ok. I've created a stripped-down sample app that shows the same issue, which is here. As there's a lot of magic that happens as part of Robolectric, and a lot of magic that happens as part of Data Binding, it makes it particularly hard to follow exactly what's going wrong. Help!
add a comment |
I've already raised an issue for Robolectric, but have had no response there, so perhaps SO can help me. We've a large app that uses Android Data Binding, and it currently on the rather old com.android.tools.build:gradle:2.1.3. We have Robolectric 3.8 tests that currently all work ok. We want to upgrade to a modern com.android.tools.build:gradle but when we do, some of our tests start to hang. There seems to be a particular way we're using data binding that is causing this, but outside of Robolectric it's all working ok. I've created a stripped-down sample app that shows the same issue, which is here. As there's a lot of magic that happens as part of Robolectric, and a lot of magic that happens as part of Data Binding, it makes it particularly hard to follow exactly what's going wrong. Help!
I've already raised an issue for Robolectric, but have had no response there, so perhaps SO can help me. We've a large app that uses Android Data Binding, and it currently on the rather old com.android.tools.build:gradle:2.1.3. We have Robolectric 3.8 tests that currently all work ok. We want to upgrade to a modern com.android.tools.build:gradle but when we do, some of our tests start to hang. There seems to be a particular way we're using data binding that is causing this, but outside of Robolectric it's all working ok. I've created a stripped-down sample app that shows the same issue, which is here. As there's a lot of magic that happens as part of Robolectric, and a lot of magic that happens as part of Data Binding, it makes it particularly hard to follow exactly what's going wrong. Help!
asked Oct 29 '18 at 10:19
Jonathan CarylJonathan Caryl
82531032
82531032
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
This is super hacky, sorry. You're running into some issues with Robolectric's simplified threading model, which we're working on for 4.1.
Meanwhile, this should work:
@Before
public void setup()
final ActivityController<MainActivity> activityController = buildActivity(MainActivity.class);
Robolectric.getForegroundThreadScheduler().pause();
activityController.setup();
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
Robolectric.getForegroundThreadScheduler().unPause();
As i said on the issue, it works for me! The bounty is yours.
– Jonathan Caryl
Nov 13 '18 at 19:57
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%2f53043331%2frobolectric-hanging-in-some-instances-with-android-databinding%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
This is super hacky, sorry. You're running into some issues with Robolectric's simplified threading model, which we're working on for 4.1.
Meanwhile, this should work:
@Before
public void setup()
final ActivityController<MainActivity> activityController = buildActivity(MainActivity.class);
Robolectric.getForegroundThreadScheduler().pause();
activityController.setup();
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
Robolectric.getForegroundThreadScheduler().unPause();
As i said on the issue, it works for me! The bounty is yours.
– Jonathan Caryl
Nov 13 '18 at 19:57
add a comment |
This is super hacky, sorry. You're running into some issues with Robolectric's simplified threading model, which we're working on for 4.1.
Meanwhile, this should work:
@Before
public void setup()
final ActivityController<MainActivity> activityController = buildActivity(MainActivity.class);
Robolectric.getForegroundThreadScheduler().pause();
activityController.setup();
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
Robolectric.getForegroundThreadScheduler().unPause();
As i said on the issue, it works for me! The bounty is yours.
– Jonathan Caryl
Nov 13 '18 at 19:57
add a comment |
This is super hacky, sorry. You're running into some issues with Robolectric's simplified threading model, which we're working on for 4.1.
Meanwhile, this should work:
@Before
public void setup()
final ActivityController<MainActivity> activityController = buildActivity(MainActivity.class);
Robolectric.getForegroundThreadScheduler().pause();
activityController.setup();
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
Robolectric.getForegroundThreadScheduler().unPause();
This is super hacky, sorry. You're running into some issues with Robolectric's simplified threading model, which we're working on for 4.1.
Meanwhile, this should work:
@Before
public void setup()
final ActivityController<MainActivity> activityController = buildActivity(MainActivity.class);
Robolectric.getForegroundThreadScheduler().pause();
activityController.setup();
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
Robolectric.getForegroundThreadScheduler().unPause();
answered Nov 13 '18 at 2:15
XianXian
864179
864179
As i said on the issue, it works for me! The bounty is yours.
– Jonathan Caryl
Nov 13 '18 at 19:57
add a comment |
As i said on the issue, it works for me! The bounty is yours.
– Jonathan Caryl
Nov 13 '18 at 19:57
As i said on the issue, it works for me! The bounty is yours.
– Jonathan Caryl
Nov 13 '18 at 19:57
As i said on the issue, it works for me! The bounty is yours.
– Jonathan Caryl
Nov 13 '18 at 19:57
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.
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%2f53043331%2frobolectric-hanging-in-some-instances-with-android-databinding%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