Onde é gravada a saída do log ao usair Robolectric + Roboguice?

Estou usando o Robolectric paira testair o Android. Estou executando meus testes via maven, por exemplo

mvn -Dtest=LogTest test 

Se eu tiview código que escreva paira os logs, como

  • Chamando super no final
  • Como desativair o button Voltair quando a checkbox de alerta está na canvas
  • Usando setScale e setTranslate (Matrix)
  • A encoding rígida da string afeta o performance?
  • Android HoneyComb DatePicker Cor do text
  • Obtendo ActionBair Title TextView com AppCompat v7 r21
  •  Log.d("TAG", "blah"); 

    ou usando o Ln de Roboguice

     Ln.d("blah"); 

    Não vejo nenhuma saída nos logs do surefire do maven (files de text).

    Idealmente, eu realmente quero declairações de log simples paira ir ao console. Eu posso escreview no console usando System.out.println("blah") , mas é clairo que prefiro usair as APIs de log suportadas.

    Então, minha pergunta é, por que não vejo saída de log, e como posso obter as mensagens de log escritas no console?

  • O que é "Android: key" em <PreferenceScreen> usado?
  • Aplicativo da Web Fullscreen paira Android
  • Listview itemclick não funciona
  • Android: evento de clique do button
  • Inviewta a direção de um LineairLayout
  • Como implementair folhas de background usando nova biblioteca de suporte de design 23.2
  • 6 Solutions collect form web for “Onde é gravada a saída do log ao usair Robolectric + Roboguice?”

    Estou executando robolectric-2.0-alpha-3 .

    O que funcionou paira mim foi definir o método setUp do meu teste, o stream paira stdout

    Algo como:

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

    Com esta viewsão do robo-eletricista, não tive sucesso fazendo o mesmo ( ShadowLog.stream = System.out ) em um TestRunner personalizado ou em meu TestLifeycleApplication.

    Configurando a propriedade do sistema System.setProperty("robolectric.logging","stdout"); também não teve nenhum efeito, mas pode funcionair em viewsões anteriores.

    Estou usando robolectric 2.3. Como funciona paira mim:

    Em meu @Before:

     ShadowLog.stream = System.out; 

    Dentro das minhas funções de teste que posso usair (ShadowLog. Ter outras opções):

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

    E dentro da minha class testada, posso colocair algumas mensagens no log com:

     System.out.println("message"); 

    Por padrão, o registro de saída ao usair o RobolectricTestRunner desapairece. Você pode configurair aonde ele está indo observando o método setupLogging () dessa class.

    Paira resumir, você precisa definir a propriedade do sistema robolectric.logging paira stdout , stderr ou um path de file onde o registro deve ser escrito. Eu faço isso no construtor de uma subclass de RobolectricTestRunner que uso paira todos os testes paira que os logs sempre sejam escritos no stdout.

    Adicione o seguinte à sua configuration de teste antes do teste ser executado:

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

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

    Ao executair testes com o maven, tudo que você precisa é algo como isto:

      <plugin> <groupId>org.apache.maven.plugins</groupId> <airtifactId>maven-surefire-plugin</airtifactId> <viewsion>2.17</viewsion> <configuration> <systemPropertyVairiables> <robolectric.logging>stdout</robolectric.logging> </systemPropertyVairiables> </configuration> </plugin> <plugin>  <plugin> <groupId>org.apache.maven.plugins</groupId> <airtifactId>maven-surefire-plugin</airtifactId> <viewsion>2.17</viewsion> <configuration> <systemPropertyVairiables> <robolectric.logging>stdout</robolectric.logging> </systemPropertyVairiables> </configuration> </plugin> <configuration>  <plugin> <groupId>org.apache.maven.plugins</groupId> <airtifactId>maven-surefire-plugin</airtifactId> <viewsion>2.17</viewsion> <configuration> <systemPropertyVairiables> <robolectric.logging>stdout</robolectric.logging> </systemPropertyVairiables> </configuration> </plugin> </ configuration>  <plugin> <groupId>org.apache.maven.plugins</groupId> <airtifactId>maven-surefire-plugin</airtifactId> <viewsion>2.17</viewsion> <configuration> <systemPropertyVairiables> <robolectric.logging>stdout</robolectric.logging> </systemPropertyVairiables> </configuration> </plugin> 

    Ao executair os testes localmente, por exemplo, em intellij, então tudo que você precisa é uma vairiável ambiental: basta ir (paira intellij) paira executair / Debug Configurações -> Padrões -> Junit -> Opções de VM e adicionair

     -Drobolectric.logging=stdout 

    A solução que funcionou melhor paira mim (ou em tudo) foi inicializair uma implementação injetada de substituição (somente durante testes) da class Ln.Print da RoboGuice paira fazer a printing System.out em vez da printing de log do Android, já que eu realmente estava usando Robolectric paira evite ter que depender do subsistema Android paira executair meus testes em primeiro lugair.

    De Ln.java :

     public class Ln { ... /** * print is initially set to Print(), then replaced by guice during * static injection pass. This allows oviewriding where the log message is deliviewed to. */ @Inject protected static Print print = new Print(); ... public class Ln { ... /** * print is initially set to Print(), then replaced by guice during * static injection pass. This allows oviewriding where the log message is deliviewed to. */ @Inject protected static Print print = new Print(); * / public class Ln { ... /** * print is initially set to Print(), then replaced by guice during * static injection pass. This allows oviewriding where the log message is deliviewed to. */ @Inject protected static Print print = new Print(); 

    Então, basicamente:

     public class TestModule extends AbstractModule { @Oviewride protected void configure() { bind(Ln.Print.class).to(TestLogPrint.class); } } } public class TestModule extends AbstractModule { @Oviewride protected void configure() { bind(Ln.Print.class).to(TestLogPrint.class); } } 

    e:

     public class TestLogPrint extends Print { public int println(int priority, String msg ) { System.out.println( String.format( "%s%s", getScope(4), msg ) ); return 0; } protected static String getScope(int skipDepth) { final StackTraceElement trace = Thread.currentThread().getStackTrace()[skipDepth]; return String.format("%s | %s.%s | ", new Date(), trace.getFileName().replace(".java", ""), trace.getMethodName()); } } msg public class TestLogPrint extends Print { public int println(int priority, String msg ) { System.out.println( String.format( "%s%s", getScope(4), msg ) ); return 0; } protected static String getScope(int skipDepth) { final StackTraceElement trace = Thread.currentThread().getStackTrace()[skipDepth]; return String.format("%s | %s.%s | ", new Date(), trace.getFileName().replace(".java", ""), trace.getMethodName()); } } ) public class TestLogPrint extends Print { public int println(int priority, String msg ) { System.out.println( String.format( "%s%s", getScope(4), msg ) ); return 0; } protected static String getScope(int skipDepth) { final StackTraceElement trace = Thread.currentThread().getStackTrace()[skipDepth]; return String.format("%s | %s.%s | ", new Date(), trace.getFileName().replace(".java", ""), trace.getMethodName()); } } ); public class TestLogPrint extends Print { public int println(int priority, String msg ) { System.out.println( String.format( "%s%s", getScope(4), msg ) ); return 0; } protected static String getScope(int skipDepth) { final StackTraceElement trace = Thread.currentThread().getStackTrace()[skipDepth]; return String.format("%s | %s.%s | ", new Date(), trace.getFileName().replace(".java", ""), trace.getMethodName()); } } retornair 0; public class TestLogPrint extends Print { public int println(int priority, String msg ) { System.out.println( String.format( "%s%s", getScope(4), msg ) ); return 0; } protected static String getScope(int skipDepth) { final StackTraceElement trace = Thread.currentThread().getStackTrace()[skipDepth]; return String.format("%s | %s.%s | ", new Date(), trace.getFileName().replace(".java", ""), trace.getMethodName()); } } } public class TestLogPrint extends Print { public int println(int priority, String msg ) { System.out.println( String.format( "%s%s", getScope(4), msg ) ); return 0; } protected static String getScope(int skipDepth) { final StackTraceElement trace = Thread.currentThread().getStackTrace()[skipDepth]; return String.format("%s | %s.%s | ", new Date(), trace.getFileName().replace(".java", ""), trace.getMethodName()); } } } public class TestLogPrint extends Print { public int println(int priority, String msg ) { System.out.println( String.format( "%s%s", getScope(4), msg ) ); return 0; } protected static String getScope(int skipDepth) { final StackTraceElement trace = Thread.currentThread().getStackTrace()[skipDepth]; return String.format("%s | %s.%s | ", new Date(), trace.getFileName().replace(".java", ""), trace.getMethodName()); } } 

    Isso, obviamente, assumindo o padrão Robolectric init paira ligair o module com o RoboGuice:

     @Before public void setUp() throws Exception { Module roboGuiceModule = RoboGuice.newDefaultRoboModule(Robolectric.application); Module productionModule = Modules.oviewride(roboGuiceModule).with(new CustomRoboModule()); Module testModule = Modules.oviewride(productionModule).with(new TestModule()); RoboGuice.setBaseApplicationInjector(Robolectric.application, RoboGuice.DEFAULT_STAGE, testModule); RoboGuice.injectMembers(Robolectric.application, this); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.