Я предпочитаю не изменять df
.
Опция заключается в извлечении index
дат start
и end
:
import numpy as np
import pandas as pd
#Dummy DataFrame
df = pd.DataFrame(np.random.random((30, 3)))
df['date'] = pd.date_range('2017-1-1', periods=30, freq='D')
#Get the index of the start and end dates respectively
start = df[df['date']=='2017-01-07'].index[0]
end = df[df['date']=='2017-01-14'].index[0]
#Show the sliced df (from 2017-01-07 to 2017-01-14)
df.loc[start:end]
что приводит к:
0 1 2 date
6 0.5 0.8 0.8 2017-01-07
7 0.0 0.7 0.3 2017-01-08
8 0.8 0.9 0.0 2017-01-09
9 0.0 0.2 1.0 2017-01-10
10 0.6 0.1 0.9 2017-01-11
11 0.5 0.3 0.9 2017-01-12
12 0.5 0.4 0.3 2017-01-13
13 0.4 0.9 0.9 2017-01-14
Насколько я знаю, я не уверен, что мы можем объединить весь модуль, но мы можем издеваться над зависимостями, предоставляемыми модулем. Я достиг этого: мне нужно высмеять DataModule для тестирования пользовательского интерфейса, поэтому я создал этот TestDataModule
и предоставил mocks для зависимости.
import com.nhaarman.mockito_kotlin.mock
import dagger.Module
import dagger.Provides
import javax.inject.Singleton
@Module
class TestDataModule {
@Provides
@Singleton
fun providesDataRepository(): DataRepository {
return mock()
}
}
Здесь TestApplicationModule
@Module
abstract class TestApplicationModule {
@Binds
abstract fun bindContext(application: Application): Context
}
И создал TestApplicationComponent
, который возьмет необходимые модули
@Singleton
@Component(modules = [
(AndroidSupportInjectionModule::class),
(TestApplicationModule::class),
(UIModule::class),
(PresentationModule::class),
(TestDataModule::class)])
interface TestApplicationComponent {
// Here you can add additional direct mock
// classes to access them directly from component reference
fun dataRepository(): DataRepository
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): TestApplicationComponent.Builder
fun build(): TestApplicationComponent
}
fun inject(app: TestAppplication)
}
Мне пришлось тестировать интерфейс с помощью Android JUnit Test runner и espresso, поэтому я использовал UIModule и Presentation Module, как есть (Can not макет, как хотелось бы проверить). Поэтому нужно издеваться над другими зависимостями, которые не являются частью этих тестов модуля UI, такими как DataRepository
. Вы можете добавить другие модули, такие как CacheModule и RemoteModules, как макеты, поскольку они не играют никакой роли в тестировании модулей UI.
Наконец, создайте DaggerTestApplicationComponent
в TestApplication
, как это,
class TestApplication : Application(), HasActivityInjector {
@Inject lateinit var activityInjector: DispatchingAndroidInjector<Activity>
private lateinit var appComponent: TestApplicationComponent
override fun onCreate() {
super.onCreate()
appComponent = DaggerTestApplicationComponent.builder()
.application(this)
.build()
appComponent.inject(this)
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
}
Итак, теперь DaggerTestApplicationComponent будет генерировать требуемый граф зависимостей.
Примечание: требуется закройте все методы, вызванные издеваемыми зависимостями