البرمجة

Mocking Kotlin Singleton Objects

لكي تقوم بمهاجمة كائن Singleton في Kotlin ، يجب عليك استخدام مكتبة لمحاكاة الكائنات مثل Mockito. لكن للأسف ، لا يمكنك استخدام Mockito مباشرة لمهاجمة كائن Singleton ، لأنه يعتبر من الكائنات التي لا يمكن إنشاؤها. ومع ذلك ، يمكنك تجاوز هذا القيد باستخدام الاستخدام الابتدائي لـ Mockito Kotlin. يمكنك القيام بذلك بإنشاء واجهة لـ SomeObject وإعادة تنفيذها في اختبارك. هناك طريقة لتحقيق هذا:

أولاً ، قم بتحويل كائن SomeObject إلى واجهة:

kotlin
interface SomeInterface { fun someFun() } object SomeObject : SomeInterface { override fun someFun() {} }

ثم قم بتغيير callerFun() لاستخدام SomeInterface بدلاً من SomeObject مباشرة:

kotlin
fun callerFun(obj: SomeInterface) { obj.someFun() }

بهذه الطريقة ، يمكنك استخدام Mockito لمحاكاة SomeInterface في اختبارك:

kotlin
import 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 الخاص بك:

kotlin
testImplementation "io.mockk:mockk:1.12.0"

ثم، في الاختبار الخاص بك، يمكنك استخدام MockK لمحاكاة كائن Singleton واختبار الدالة someFun() كالتالي:

kotlin
import 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() المحاكاة.

زر الذهاب إلى الأعلى