Ich habe einen Kotlin -Code geschrieben und möchte Unit -Tests dafür schreiben. Aber ich stellte fest, dass der von mir geschriebene Unit -Testcode, den ich geschrieben habe, immer noch eine 100% ige Zweigabdeckung abdecken kann. Was soll ich tun? < /P>
Kotlin Code: < /p>
Ich habe einen Kotlin -Code geschrieben und möchte Unit -Tests dafür schreiben. Aber ich stellte fest, dass der von mir geschriebene Unit -Testcode, den ich geschrieben habe, immer noch eine 100% ige Zweigabdeckung abdecken kann. Was soll ich tun? < /P> Kotlin Code: < /p> [code]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
withContext(Dispatchers.IO){ myRepository.fetchData(-1) } } @Test fun testMyRepository2() = scope.runTest {
withContext(Dispatchers.IO){ myRepository.fetchData(1) } } } < /code> Zusätzlich ändere ich das Objekt von < /p> myRepository to myRepository=mockk (relaxed=true) [/code] Die Abdeckung beträgt 0% und es wird kein Code ausgeführt. src = "https://i.sstatic.net/3k494idl.png"/> [img]https://i.sstatic.net/V6Fkwyth.png[/img]
Betrachten Sie dieses Beispiel:
// thread A:
start_transaction();
update_mysql();
commit_transaction(); // remove key from mysql tables
remove_redis_cache( key );
Beim Online-Kurs wurde erwähnt, dass, wenn wir einen bedingten Ausdruck in Java haben, der auf der einen Seite Byte oder Short und auf der anderen Seite Final Int zurückgibt, dann if Der int-Wert...
Der folgende Test fällt aus. Ich habe es manuell getestet und es funktioniert. Aber ich bin mir nicht sicher, warum die Methode nicht aufgerufen wird. Ich nehme an, es hat damit zu tun, dass ich eine...
Ich habe das Dokument gelesen, verstehe es aber immer noch nicht.
Die Unterschiede zwischen diesem
private val myClass: MyClass = mockk(relaxed = true)