我正在開發(fā)一個用Kotlin編寫的Android應(yīng)用程序。我想使用Log.*來查看單元測試中一些非常簡單的邏輯的輸出,呈現(xiàn)為字符串。我正在使用mock作為另一個問題的建議。
我沒有收到任何錯誤,測試工作正常;然而,在Android Studio的Logcat中,甚至沒有一行被打印出來。我檢查了過濾器和當(dāng)前設(shè)備,但沒有結(jié)果。
這是我的簡化代碼:
// UnitTest.kt
class MyUnitTest {
@Before
fun setup() {
mockkStatic(Log::class)
every { Log.d(any(), any()) } returns 0
}
@Test
fun do_test() {
// ... some logic
Log.d("TEST_TAG", "Test string")
}
}
我還試圖:
- 將標(biāo)記為
@JvmStatic
的函數(shù)中的Log放入伴隨對象 - 按照這里的建議,將以下內(nèi)容添加到應(yīng)用程序級別
build.gradle
(盡管沒有注釋)
testOptions {
unitTests.returnDefaultValues = true
}
- 去掉所有內(nèi)容,使用主答案的kotlin實現(xiàn)。類似于:
// app/src/test/android/util/MyLog.kt
package android.util
class MyLog {
companion object {
@JvmStatic
fun d(tag: String, msg: String): Int {
println("DEBUG: $tag: $msg")
return 0
}
}
不幸的是,這些都不起作用(使用任何日志級別)。
我沒有很好的考試寫作經(jīng)驗,我錯過了什么嗎?
編輯(關(guān)于解決方案):
我的目標(biāo)是Logcat,這是錯誤的,因為單元測試在本地機(jī)器上運(yùn)行。
您需要使用
println()
登錄單元測試。Logcat顯示來自設(shè)備的消息。由于單元測試正在本地計算機(jī)上運(yùn)行,因此實際上不可能看到消息。
println()
將消息打印到測試“控制臺”。