我正在尝试试驾我正在对我的Android服务进行的一系列更改(Android.app.service
)-我正在使用Dagger和Robolectric,我需要用一些模拟来替换服务中的字段注入类,以缩小测试范围…使它(稍微)更像“单元”。
我在我的android.app.Service
中插入提供者(Guice语法…)。在单元测试期间,如何用MockProviders替换它们?
这就是相关服务代码的样子;
@Inject SpotService spotService;
@Inject Provider<SynchroniseTidePosition> syncTidePosition;
@Inject Provider<SynchroniseSwellDataTask> syncBuoyData;
@Inject Provider<SynchroniseConditionsTask> syncConditionsData;
@Inject SpotRatingCalculator spotRatingCalculator;
@Inject LocalBroadcastManager localBroadcastManager;
@Inject NotificationManager notificationManager;
/**
* @see android.app.Service#onCreate()
*/
@Override
public void onCreate() {
super.onCreate();
inject(this);
...
因此,在正常操作下,
startService(intent)
调用允许服务在onCreate
期间注入其依赖项,我们都很好。
在我的测试下,我想用Mockito模拟替换注入的
Provider
sget()
调用。我试图遵循Dagger测试示例,并创建了一个类似于此的测试模块;
@Module(includes = OceanLifeModule.class,
injects = {TestSynchronisationServiceNotifications.class},
overrides = true)
static class TestSynchronisationServiceNotificationsModule {
@Provides LocalBroadcastManager provideLocalBroadcastManager() {
return LocalBroadcastManager.getInstance(Robolectric.application);
}
@Provides NotificationManager providesNotificationManager() {
return (NotificationManager) Robolectric.application.getSystemService(Context.NOTIFICATION_SERVICE);
}
@Provides SpotService provideSpotService() {
return mock(SpotService.class);
}
@Provides SpotRatingCalculator provideSpotRatingCalculator() {
return mock(SpotRatingCalculator.class);
}
@Provides SynchroniseTidePosition provideSyncTidePosition() {
return mock(SynchroniseTidePosition.class);
}
@Provides SynchroniseConditionsTask provideSyncConditionsTask() {
return mock(SynchroniseConditionsTask.class);
}
@Provides SynchroniseSwellDataTask provideSyncSwellDataTask() {
return mock(SynchroniseSwellDataTask.class);
}
}
我期望当我的实际服务代码调用提供程序
get()
时,我会得到Mockito模拟(这些是我的测试模块@提供的模拟)。
这不会发生。我来这里的方法怎么了?
制作自己的Providers.of()
:
public static <T> Provider<T> of(final T t) {
return new Provider<T>() {
public T get() {
return t;
}
}
}
Dagger应该在测试模块中包含这一点。
我有一个使用Spring依赖注入的Java应用程序。我想模拟一个bean,并验证它是否接收某些方法调用。 问题是Mockito不会在测试之间重置mock,因此我无法正确验证对它的方法调用。 我的测试单元: 单元测试类: 最后, 虽然我可以通过在测试之间手动重置模拟来解决这个问题,但我想知道是否有更干净/更习惯的方法。
我正在用Kotlin和Dagger 2开发一个Android项目。我有一个,我在其中定义了一些提供程序函数。 我看到有些人使用kotlin,有些人使用Dagger的来注释提供者函数: > 注释和/或的动机是什么?背后的原因是什么,或者这样做的好处是什么? 使用和哪个更好?或者哪一个都没问题?或者我应该两个都用,如果是,那么两个都用的原因是什么?
嗨,我有一个问题。我想用espresso为Ui编写android测试,为了让测试不是乱七八糟的,我想嘲弄一下我的演示者。 我在应用程序里用匕首。我的配置如下: 我有组件的模块 那么我也有一个用于活动的组件和一个用于组件的模块 那么我的页面就有了子组件 和子组件的模块 然后详细信息activity注入DetailPresenter 然后是使用构造函数注入的presenter 现在在测试中,我要做的是
我正在使用SpringRunner运行JUnit mockito测试用例,下面是类,我试图编写测试用例,但得到空对象 //Junit测试用例 但是下面的代码即使在模拟这个之后仍然返回空值,你能帮助如何模拟这个吗? 注意:只有Mockito需要使用无powermockito
当我从spring-boot应用程序运行测试时,我得到了以下错误。我使用版本=2.3.3.和版本=2.2.0的进行集成测试。 null
第一个问题:如何注入模拟(或真实?)HttpServletResponse在我对CXF JAX-RS服务endpoint进行单元测试期间? 我们的服务是如何设置的示例(注意我没有控制/权限来更改非测试结构): 测试类: 我可能在这里做错了几件事,但是我希望我只需要在我的自定义调用器中加入正确的“魔法”,以便正确地向我的endpoint注入HttpServlet响应。我要注意的是,在我没有注入上下文