Как проверить функцию приостановки, чтобы соответствовать покрытию ветвей, используя MockkAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как проверить функцию приостановки, чтобы соответствовать покрытию ветвей, используя Mockk

Сообщение Anonymous »

Я написал код Kotlin и хочу написать для него модульные тесты. Но я обнаружил, что код тестового модуля, который я написал, по -прежнему не может охватить 100% покрытие филиала. Что мне сделать?

Код: Выделить всё

class MyRepository @Inject constructor(
@DefaultDispatcher private val dispatcher: CoroutineDispatcher,
@ApplicationScope private val scope: CoroutineScope,
val checkService:ICheckService = CheckService()
) {
fun fetchData(value: Int): String {
return runBlocking(dispatcher) {
suspendCoroutine { continuation ->
println(111)
scope.launch(dispatcher) {
println(222)
delay(100)
println(333)
if(checkService.check(value)){
println(444)
}
continuation.resume("result")
}
}
}
}
}

interface ICheckService {
suspend fun check(value:Int): Boolean
}

class CheckService:ICheckService{
override suspend fun check(value: Int): Boolean {
// mock delay
delay(300)

return value > 0
}

}
< /code>
ut Code: < /p>
class MyRepositoryTest4 {
private lateinit var myRepository: MyRepository
private val dispatcher = StandardTestDispatcher()
private lateinit var scope: TestScope

@Before
fun setUp() {
scope = TestScope(dispatcher)
myRepository = MyRepository(dispatcher, scope)
}

@Test
fun testMyRepository1() = scope.runTest {

withContext(Dispatchers.IO){
myRepository.fetchData(-1)
}
}
@Test
fun testMyRepository2() = scope.runTest {

withContext(Dispatchers.IO){
myRepository.fetchData(1)
}
}
}
< /code>
Кроме того, если я изменю объект < /p>
myRepository to myRepository=mockk (relaxed=true)
, покрытие будет 0%, и код не будет выполнен. src = "https://i.sstatic.net/3k494idl.png"/>
Изображение


Подробнее здесь: https://stackoverflow.com/questions/792 ... sing-mockk
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»