Extract base test classes to separate module

This commit is contained in:
Kirill Kamakin
2022-11-12 13:52:56 +01:00
parent cb23f1a62d
commit 4dcf1cc915
7 changed files with 37 additions and 0 deletions

1
testing/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

34
testing/build.gradle.kts Normal file
View File

@@ -0,0 +1,34 @@
plugins {
id("gq.kirmanak.mealient.library")
id("kotlin-kapt")
id("dagger.hilt.android.plugin")
}
android {
namespace = "gq.kirmanak.mealient.test"
}
dependencies {
implementation(project(":logging"))
implementation(libs.google.dagger.hiltAndroid)
kapt(libs.google.dagger.hiltCompiler)
kapt(libs.google.dagger.hiltAndroidCompiler)
implementation(libs.google.dagger.hiltAndroidTesting)
implementation(libs.jetbrains.kotlinx.coroutinesAndroid)
implementation(libs.jetbrains.kotlinx.coroutinesTest)
implementation(libs.androidx.test.junit)
implementation(libs.androidx.coreTesting)
implementation(libs.google.truth)
implementation(libs.io.mockk)
implementation(libs.robolectric)
}
kapt {
correctErrorTypes = true
}

View File

@@ -0,0 +1,33 @@
package gq.kirmanak.mealient.test
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import gq.kirmanak.mealient.logging.Logger
import io.mockk.MockKAnnotations
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.setMain
import org.junit.After
import org.junit.Before
import org.junit.Rule
@OptIn(ExperimentalCoroutinesApi::class)
open class BaseUnitTest {
@get:Rule
val instantExecutorRule = InstantTaskExecutorRule()
protected val logger: Logger = FakeLogger()
@Before
open fun setUp() {
MockKAnnotations.init(this)
Dispatchers.setMain(UnconfinedTestDispatcher())
}
@After
fun tearDown() {
Dispatchers.resetMain()
}
}

View File

@@ -0,0 +1,34 @@
package gq.kirmanak.mealient.test
import gq.kirmanak.mealient.logging.Logger
import gq.kirmanak.mealient.logging.MessageSupplier
class FakeLogger : Logger {
override fun v(throwable: Throwable?, tag: String?, messageSupplier: MessageSupplier) {
print("V", throwable, messageSupplier)
}
override fun d(throwable: Throwable?, tag: String?, messageSupplier: MessageSupplier) {
print("D", throwable, messageSupplier)
}
override fun i(throwable: Throwable?, tag: String?, messageSupplier: MessageSupplier) {
print("I", throwable, messageSupplier)
}
override fun w(throwable: Throwable?, tag: String?, messageSupplier: MessageSupplier) {
print("W", throwable, messageSupplier)
}
override fun e(throwable: Throwable?, tag: String?, messageSupplier: MessageSupplier) {
print("E", throwable, messageSupplier)
}
private fun print(
level: String,
throwable: Throwable?,
messageSupplier: MessageSupplier,
) {
println("$level ${messageSupplier()}. ${throwable?.stackTraceToString().orEmpty()}")
}
}

View File

@@ -0,0 +1,22 @@
package gq.kirmanak.mealient.test
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltTestApplication
import org.junit.Before
import org.junit.Rule
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
@RunWith(AndroidJUnit4::class)
@Config(application = HiltTestApplication::class, manifest = Config.NONE)
abstract class HiltRobolectricTest {
@get:Rule
var hiltRule = HiltAndroidRule(this)
@Before
fun inject() {
hiltRule.inject()
}
}