لكي تقوم بمهاجمة كائن Singleton في Kotlin ، يجب عليك استخدام مكتبة لمحاكاة الكائنات مثل Mockito. لكن للأسف ، لا يمكنك استخدام Mockito مباشرة لمهاجمة كائن Singleton ، لأنه يعتبر من الكائنات التي لا يمكن إنشاؤها. ومع ذلك ، يمكنك تجاوز هذا القيد باستخدام الاستخدام الابتدائي لـ Mockito Kotlin. يمكنك القيام بذلك بإنشاء واجهة لـ SomeObject وإعادة تنفيذها في اختبارك. هناك طريقة لتحقيق هذا:
أولاً ، قم بتحويل كائن SomeObject إلى واجهة:
-
استخدام RecyclerView كـ Vertical ViewPager07/03/2024
-
تمثيل الكائنات في Swift05/03/2024
kotlininterface SomeInterface {
fun someFun()
}
object SomeObject : SomeInterface {
override fun someFun() {}
}
ثم قم بتغيير callerFun() لاستخدام SomeInterface بدلاً من SomeObject مباشرة:
kotlinfun callerFun(obj: SomeInterface) {
obj.someFun()
}
بهذه الطريقة ، يمكنك استخدام Mockito لمحاكاة SomeInterface في اختبارك:
kotlinimport org.mockito.Mockito.*
val mockObject = mock(SomeInterface::class.java)
callerFun(mockObject)
verify(mockObject).someFun()
هذا الكود يستخدم Mockito لإنشاء كائن وهمي من SomeInterface واستخدامه لاختبار سلوك callerFun() الخاص بك.
المزيد من المعلومات
للتعامل مع كائن Singleton في Kotlin، يمكنك استخدام مكتبة MockK التي تقدم طرقًا سهلة لاختبار الكائنات المشتقة من الكائنات المنفردة. إليك كيفية استخدام MockK لمحاكاة كائن Singleton في Kotlin:
أولاً، قم بإضافة MockK إلى ملف build.gradle الخاص بك:
kotlintestImplementation "io.mockk:mockk:1.12.0"
ثم، في الاختبار الخاص بك، يمكنك استخدام MockK لمحاكاة كائن Singleton واختبار الدالة someFun() كالتالي:
kotlinimport io.mockk.every
import io.mockk.mockkObject
import io.mockk.unmockkAll
object SomeObject {
fun someFun(): String {
return "Real implementation"
}
}
fun callerFun(): String {
return SomeObject.someFun()
}
fun main() {
mockkObject(SomeObject)
every { SomeObject.someFun() } returns "Mocked implementation"
val result = callerFun()
println(result) // Output: Mocked implementation
unmockkAll()
}
هذا الكود يستخدم MockK لمحاكاة كائن SomeObject واستبدال تنفيذه الحقيقي بتنفيذ مزيف. باستخدام every { SomeObject.someFun() } returns “Mocked implementation” ، يتم تعيين قيمة محددة تُرجعها دالة someFun() المحاكاة.