小编man*_*ool的帖子

<android.arch.lifecycle.ViewModel>> 不能在没有@Provides-annotated 方法的情况下提供

我正在尝试像在这个例子中那样创建一个 viewmodel 模块,但我遇到了这个错误

错误:java.util.Map,javax.inject.Provider> 不能在没有 @Provides-annotated 方法的情况下提供。

我遵循了所有示例,这是我的代码

ViewModelFactory 类

@Singleton
public class ViewModelFactory implements ViewModelProvider.Factory {

    private final Map<Class<? extends ViewModel>, Provider<ViewModel>> mCreators;

    @Inject
    ViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) {
        mCreators = creators;
    }

    @NonNull
    @Override
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        Provider<? extends ViewModel> creator = mCreators.get(modelClass);
        if (creator == null) {
            for (Map.Entry<Class<? extends ViewModel>, Provider<ViewModel>> entry : mCreators
                    .entrySet()) {
                if (modelClass.isAssignableFrom(entry.getKey())) {
                    creator = entry.getValue();
                    break;
                }
            }
        }
        if …
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection viewmodel dagger-2

5
推荐指数
1
解决办法
2221
查看次数

将 build.gradle 文件迁移到 buildSrc 目录中的 build.gradle.kts 后,未解决对 org.gradle.api 依赖项的引用

我正在尝试将 build.gradle 文件迁移到 buildSrc 目录中的 build.gradle.kts 。请注意,在我的 buildSrc 中,我已经使用 java-gradle-plugin 并使用 org.gradle.api 中的 api 创建了一个 gradle 插件,例如插件、项目等。但是当我配置脚本时,我在文件中得到了一个未解析的引用,该引用使用 org .gradle.api

这是 build.gradle 文件的代码

plugins {
    id 'java'
    id 'java-gradle-plugin'
    id 'org.jetbrains.kotlin.jvm' version '1.3.21'
}

gradlePlugin {
    plugins {
        netguard {
            id = 'pluginId'
            implementationClass = 'myplugin.plugin.awesomeplugin'
        }
    }
}
repositories {
    mavenCentral()
}
dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}
compileKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
compileTestKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是迁移后的 build.gradle.kts

import org.gradle.kotlin.dsl.*
import …
Run Code Online (Sandbox Code Playgroud)

android kotlin build.gradle gradle-kotlin-dsl

5
推荐指数
0
解决办法
1393
查看次数

使用Mockito进行NPE单元测试

我试图对下面的一些util类进行单元测试:

public final class WalletInputValidationUtils {
private WalletInputValidationUtils() {
}

public static boolean isEmailValid(CharSequence email) {
    return Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
}
Run Code Online (Sandbox Code Playgroud)

这是测试班

@RunWith(PowerMockRunner.class)
public class WalletInputValidationUtilsTest {
private static final CharSequence DUMMY_EMAIL = "email@gmail.com";

@Test
public void isEmailValidTest1() {
    Assert.assertTrue(isEmailValid(DUMMY_EMAIL));
}
}
Run Code Online (Sandbox Code Playgroud)

我在这行有空指针异常

return Patterns.EMAIL_ADDRESS.matcher(email).matches();
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪

java.lang.NullPointerException
at kudo.mobile.app.wallet.backwardcompatibility.WalletInputValidationUtils.isEmailValid(WalletInputValidationUtils.java:14)
at kudo.mobile.app.wallet.backwardcompatibility.WalletInputValidationUtilsTest.isEmailValidTest(WalletInputValidationUtilsTest.java:31)
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.internal.runners.TestMethod.invoke(TestMethod.java:68)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunne
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题?谢谢

java android unit-testing mockito

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