Where is log output written to when using Robolectric + Roboguice?

I'm using Robolectric to test Android. I'm running my tests via maven, e.g.

mvn -Dtest=LogTest test

If I have code that writes to the logs, such as

Log.d("TAG", "blah");

or using Roboguice's Ln

Ln.d("blah");

I don't see any output in maven's surefire logs (text files).

Ideally, I actually want simple log statements to go to the console. I can write to the console by using System.out.println("blah"), but of course I'd rather use the supported logging APIs.

So my question is, why am I not seeing log output at all, and how can I get the log messages written to the console?


Solution 1:

I am running robolectric-2.0-alpha-3.

What worked for me was to set in the setUp method of my test the stream to stdout

Something like:

@Before
public void setUp() throws Exception {
  ShadowLog.stream = System.out;
  //you other setup here
}

With this version of robolectric I had no success doing the same (ShadowLog.stream = System.out) in a custom TestRunner or in my TestLifeycleApplication.

Setting the system property System.setProperty("robolectric.logging","stdout"); was of no effect as well, but it might works in previous versions.

Solution 2:

Im using robolectric 2.3. How works for me:

Into my @Before:

ShadowLog.stream = System.out;

Inside my test functions i can use (ShadowLog. have other options):

ShadowLog.v("tag", "message");

And inside my tested class I can put some messages at log with:

System.out.println("message");

Solution 3:

By default, logging output when using the RobolectricTestRunner disappears. You can configure where it goes by looking at the setupLogging() method of that class.

To summarize, you need to set the robolectric.logging system property to either stdout, stderr, or a file path where the log should be written. I do this in the constructor of a subclass of RobolectricTestRunner that I use for all tests so that logs always get written to stdout.

Solution 4:

Add the following to your test setup before your test runs:

ShadowLog.stream = System.out;
Robolectric.bindShadowClass(ShadowLog.class);

https://groups.google.com/forum/?fromgroups=#!msg/robolectric/PK-9cQQQROw/svuQzM5h_vsJ