Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ShadowSystemClock NullPointerException_Android_Nullpointerexception_Tdd_Robolectric - Fatal编程技术网

Android ShadowSystemClock NullPointerException

Android ShadowSystemClock NullPointerException,android,nullpointerexception,tdd,robolectric,Android,Nullpointerexception,Tdd,Robolectric,我在Robolectric测试用例中实例化CustomaApplication.class时遇到了问题,这一行正好是private long value=SystemClock.elapsedRealtime()。通过简单地扩展Deckard应用程序,我使用示例项目进行了一些测试: public class DeckardApplication extends Application { private long value = SystemClock.elapsedRealtime(

我在Robolectric测试用例中实例化CustomaApplication.class时遇到了问题,这一行正好是
private long value=SystemClock.elapsedRealtime()
。通过简单地扩展Deckard应用程序,我使用示例项目进行了一些测试:

public class DeckardApplication extends Application {

    private long value = SystemClock.elapsedRealtime();

}
这会导致完全相同的错误:

Caused by: java.lang.NullPointerException
    at org.robolectric.shadows.ShadowLooper.getMainLooper(ShadowLooper.java:59)
    at android.os.Looper.getMainLooper(Looper.java)
    at org.robolectric.Robolectric.getUiThreadScheduler(Robolectric.java:1244)
    at org.robolectric.shadows.ShadowSystemClock.now(ShadowSystemClock.java:15)
    at org.robolectric.shadows.ShadowSystemClock.uptimeMillis(ShadowSystemClock.java:30)
    at org.robolectric.shadows.ShadowSystemClock.elapsedRealtime(ShadowSystemClock.java:35)
    at android.os.SystemClock.elapsedRealtime(SystemClock.java)
    at com.example.DeckardApplication.<init>(DeckardApplication.java:8)
    at java.lang.Class.newInstance(Class.java:374)
    at org.robolectric.DefaultTestLifecycle.createApplication(DefaultTestLifecycle.java:46)
    at org.robolectric.DefaultTestLifecycle.createApplication(DefaultTestLifecycle.java:13)
    at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:100)
    at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:404)
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:220)
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
    at 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:175)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:103)
    at org.apache.maven.surefire.Surefire.run(Surefire.java:169)
    ... 2 more
原因:java.lang.NullPointerException
位于org.roblectric.shadows.ShadowLooper.getMainLooper(ShadowLooper.java:59)
位于android.os.Looper.getMainLooper(Looper.java)
位于org.roblectric.roblectric.getUiThreadScheduler(roblectric.java:1244)
位于org.roblectric.shadows.ShadowSystemClock.now(ShadowSystemClock.java:15)
位于org.roblectric.shadows.ShadowSystemClock.uptimeMillis(ShadowSystemClock.java:30)
位于org.roblectric.shadows.ShadowSystemClock.elapsedRealtime(ShadowSystemClock.java:35)
位于android.os.SystemClock.elapsedRealtime(SystemClock.java)
位于com.example.DeckardApplication.(DeckardApplication.java:8)
位于java.lang.Class.newInstance(Class.java:374)
位于org.roblectric.DefaultTestLifecycle.createApplication(DefaultTestLifecycle.java:46)
位于org.roblectric.DefaultTestLifecycle.createApplication(DefaultTestLifecycle.java:13)
位于org.roblectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:100)
位于org.roblectric.roblectrictTestRunner.setUpApplicationState(roblectrictTestRunner.java:404)
位于org.roblectric.roblectrictTestRunner$2.evaluate(roblectrictTestRunner.java:220)
位于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)
位于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.roblectric.roblectrictTestRunner$1.evaluate(roblectrictTestRunner.java:175)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:236)
位于org.apache.maven.surefire.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)
... 还有两个

如何处理这个错误?我需要提供一些自定义ShadowSystemClock实现吗?

有一个提供自定义ShadowSystemClock的解决方案。示例如下:

@Implements(value = SystemClock.class, callThroughByDefault = true)
    public static class MyShadowSystemClock {
        public static long elapsedRealtime() {
            return 0;
        }
    }
然后将其应用于test
@Config(shadows={MyShadowSystemClock.class})


但我仍在等待更好的解决方案。

我们也可以使用阴影日历吗?