2013-06-05 43 views
4

我正在嘗試使用robolectric和roboguice進行測試。我成功地注入和測試類,但是當我嘗試測試活動,我似乎無法在測試環境中創建的視圖對象Robolectric 2.0在測試時沒有創建視圖

我收到以下錯誤

testAttemptsLoginWhenSignInButtonIsClicked(com.clearc2.HomeActivityTest ) 已用時間:2.234秒< < <錯誤! java.lang.RuntimeException:失敗 創建一個android.widget.EditText org.robolectric.res.builder.LayoutBuilder.constructView(LayoutBuilder.java:182) at org.robolectric.res.builder.LayoutBuilder.create (LayoutBuilder.java:109) 在 org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:42) 在 org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:45) 在 org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:45) 在 org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:45) 在 Ô rg.robolectric.res.builder.LayoutBuilder.inflateView(LayoutBuilder.java:62) 在 org.robolectric.shadows.ShadowLayoutInflater.inflate(ShadowLayoutInflater.java:50) 在 org.robolectric.shadows.ShadowLayoutInflater.inflate( ShadowLayoutInflater.java:55) 在android.view.LayoutInflater.inflate(LayoutInflater.java)在 org.robolectric.tester.android.view.RoboWindow.setContentView(RoboWindow.java:80) 在 org.robolectric.shadows .ShadowActivity.setContentView(ShadowActivity.java:265) at android.app.Activity.setContentView(Activity.java)at com.clearc2.HomeActivity.onCreate(HomeActivity.java:38)at com.clearc2.HomeActivityTest.setUp (HomeActivityTest的.java:22)在 org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 在 org.junit。 internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 在 org.robolectric.RobolectricTestRunner $ 2.evaluate(RobolectricTestRunner.java:246) 在 org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(塊JUnit4ClassRunner.java:79) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 在org.junit。 runners.ParentRunner $ 3.run(ParentRunner.java:193)在 org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52)在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)在 org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42)在 org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184)在 org.robolectric.RobolectricTestRunner $ 1.evaluate(RobolectricTestRunner .java:181) at org.junit.runners.ParentR unner.run(ParentRunner.java:236) org.apache.maven.surefire.junit4.JUnit4TestSet。執行(JUnit4TestSet.java:59) 在 org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120) 在 org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite。的java:103) 在org.apache.maven.surefire.Surefire.run(Surefire.java:169)在 org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350) 在 有機.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021) 由於:java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在java.lang.reflect.Constructor.newInstance(Constructor.java:525) 在 org.robolectric.res.builder.LayoutBuilder.constructView(LayoutBuilder.java:167) 在 org.robolectric.res.builder.LayoutBuilder.create(LayoutBuilder.java:109) 在 org.robolectric.res .builder.LayoutBuilder.doInflate(LayoutBuilder.java:42) at org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:45) at org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:45) 在 org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:45) 在 org.robolectric.res.builder .LayoutBuilder.inflateView(LayoutBuilder.java:62) 在 org.robolectric.shadows.ShadowLayoutInflater.inflate(ShadowLayoutInflater.java:50) 在 org.robolectric.shadows.ShadowLayoutInflater.inflate(ShadowLayoutInflater.java:55) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.in voke(DelegatingMethodAccessorImpl.java:43) at android.properties上的java.lang.reflect.Method.invoke(Method.java:601) org.robolectric.bytecode.ShadowWrangler $ ShadowMethodPlan.run(ShadowWrangler.java:440) 。 view.LayoutInflater.inflate(LayoutInflater.java)在 org.robolectric.tester.android.view.RoboWindow.setContentView(RoboWindow.java:80) 在 org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.java:265 ) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)在 org.robolectric.bytecode.ShadowWrangler $ ShadowMethodPlan.run(ShadowWrangler.java:440) 在android.app.Activity.setContentView(活動。 JAVA)處 sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) com.clearc2.HomeActivity.onCreate(HomeActivity.java:38)在 com.clearc2.HomeActivityTest.setUp(HomeActivityTest.java:22)在 太陽.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)在 org.junit.runners.model.FrameworkMethod $ 1runReflectiveCall(FrameworkMethod.java:44) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java: 41) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 在 org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 在 org.robolectric.RobolectricTestRunner $ 2.evaluate(RobolectricTestRunner.java:246) 在 org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner .java:193)at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)at org.junit.runners。 ParentRunner.access $ 000(ParentRunner.java:42)at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184)at org.robolectric.RobolectricTestRunner $ 1.evaluate(RobolectricTestRunner.java:181) at org .junit.runners.ParentRunner.run(ParentRunner.java:236)at org.apache.maven.su refire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59) 在 org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120) 在 org.apache.maven.surefire.suite。 AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:103) 在org.apache.maven.surefire.Surefire.run(Surefire.java:169)在 sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)在 sun.reflect.NativeMethodAccessorImpl .invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)... 2更 原因d:java.lang.NumberFormatException:對於輸入字符串:「@ 0」 java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:492)at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:123) at android.content.res.TypedArray.getInt(TypedArray.java:254)at android.widget.TextView。 構造(TextView.java:827)在 android.widget.TextView。(TextView.java:447)在 android.widget.EditText。(EditText.java:60)在 android.widget.EditText。(的EditText的.java:56)在 org.robolectric.res.builder.LayoutBuilder.constructView(LayoutBuilder.java:167) 在 org.robolectric.res.builder.LayoutBuilder.create(LayoutBuilder.java:109) 在 有機.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:42) 在 org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:45) 在 org.robolectric.res.builder.LayoutBuilder .doInflate(LayoutBuil der.java:45) 在 org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:45) 在 org.robolectric.res.builder.LayoutBuilder.inflateView(LayoutBuilder.java:62) 在 org.robolectric.shadows.ShadowLayoutInflater.inflate(ShadowLayoutInflater。的java:50) 在 org.robolectric.shadows.ShadowLayoutInflater.inflate(ShadowLayoutInflater.java:55) 在android.view.LayoutInflater.inflate(LayoutInflater.java)在 org.robolectric.tester.android.view.RoboWindow .setContentView(RoboWindow.java:80) at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.java:265) at android.app.Activity.setContentView(Activity.java)at com.clearc2.HomeActivity。的onCreate(HomeActivity.java:38)在 com.clearc2.HomeActivityTest.setUp(HomeActivityTest.java:22)在 org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44) 在 組織。 junit.internal.r unners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 在 org.junit.internal.runners.statements.RunBefores。評估(RunBefores.java:27) 在 org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 在 org.robolectric.RobolectricTestRunner $ 2.evaluate(RobolectricTestRunner.java:246) 在 org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:193)在 org.junit.runners.ParentRunner $ 1.schedule(ParentRunner .java:52)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42)at org.junit.runners。 ParentRunner $ 2.evaluate(ParentRunner.java:184)在 org.robolectric.RobolectricTestRunner $ 1.evaluate(RobolectricTestRunner.java:181) 在org.junit.runners.ParentRunner.run(ParentRunner.java:236)在 組織。 apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59) at org。 apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120) 在 org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:103) 在org.apache.maven.surefire .Surefire.run(Surefire.java:169)... 2 更多

回答

6

發現問題。 Robolectric不喜歡我的密碼EditText上設置的android ime選項。只要我刪除這些線路,測試按預期運行。

+2

這是正確的答案,對我來說這是一個很大的幫助。那謝謝啦。並且不要忘記將其標記爲正確的答案。乾杯。 –

2

我有過類似的錯誤,但問題是imeActionId,不imeOptions。從XML中刪除imeActionId並將其設置爲代碼(但保留imeOptions)解決了此問題。

這裏是我的錯誤,以供參考和搜索引擎爬蟲讓人們可以找到這個答案簡單:

android.view.InflateException: XML file app/build/intermediates/res/debug/layout/fragment_registration_form.xml 
line #-1 (sorry, not yet implemented): Error inflating class com.company.project.widgets.MyCustomEditTextView 
... 
Caused by: java.lang.reflect.InvocationTargetException 
... 
Caused by: java.lang.NumberFormatException: For input string: "@0" 
... 

我想Robolectric不能正確解析imeActionId出於某種原因。看起來它與這個問題中描述的問題有關:Why does setting imeActionId with a predefined ID resource create an error?