小编use*_*087的帖子

Firestore本地JUnit测试

是否有一个库可以为本地单元测试(如用于Google App Engine数据存储库的库)获取模拟版本的Firestore:

private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());https://cloud.google.com/appengine/docs/standard/java/tools/localunittesting#datastore-memcache

此文件的Firestore模拟https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/google-cloud-firestore/src/test/java/com/google/cloud/firestore/FirestoreTest.java可以不行:

java.lang.NullPointerException
at com.google.cloud.firestore.FirestoreImpl.sendRequest(FirestoreImpl.java:399)
at com.google.cloud.firestore.UpdateBuilder.commit(UpdateBuilder.java:467)
at com.google.cloud.firestore.WriteBatch.commit(WriteBatch.java:41)
at com.google.cloud.firestore.DocumentReference.set(DocumentReference.java:156)
at com.google.cloud.firestore.FirestoreMocked.test(FirestoreMocked.kt:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:79)
at org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:85)
at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:39)
at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:163)
Run Code Online (Sandbox Code Playgroud)

java google-app-engine junit unit-testing google-cloud-firestore

7
推荐指数
0
解决办法
423
查看次数

为什么必须将“Dispatchers.Main”添加到 Activitys CoroutineScope 实现的根作业中?

abstract class ScopedAppActivity: AppCompatActivity(), CoroutineScope {
    protected lateinit var job: Job
    override val coroutineContext: CoroutineContext 
        get() = job + Dispatchers.Main

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        job = Job()

        launch(Dispatchers.Main) {
            try {
                delay(Long.MAX_VALUE)
            } catch (e: Exception) {
                // e will be a JobCancellationException if the activty is destroyed
            }
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        job.cancel()
    } 
}
Run Code Online (Sandbox Code Playgroud)

这个例子是从协程指南中复制的,并由launch(Dispatchers.Main)协程扩展。我不明白为什么+ Dispatchers.Main需要第 4 行。如果我删除这部分,launch如果 Activity 被销毁,协程无论如何都会被取消。那么是什么原因Dispatchers.Main呢?为什么也Dispatchers.IO没有添加?

android kotlin kotlin-coroutines

4
推荐指数
1
解决办法
1957
查看次数