Как проверить приватные методы в Kotlin?Я пытался добавить @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
из androidx.annotation.VisibleForTesting
, но это не делает мою функцию приватной
Вот как я ее использую
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
fun doSomething() {}
[EDIT]
Я понимаю, что не должен тестировать private
методы, но теперь это всегда тривиально.Как насчет случая ниже.
У меня есть класс CsvReader
class CsvReader(private val inputStream: InputStream, private val separator: String = "\t") {
fun read(): List<String> {
return read(inputStream.bufferedReader())
}
private fun read(bufferedReader: BufferedReader): List<String> {
val line = bufferedReader.use { it.readLine() } // `use` is like try-with-resources in Java
return parse(line)
}
private fun parse(line: String): List<String> {
return line.split(separator)
}
}
И я написал для него тесты
class CsvReaderTest {
private val stream = mock<InputStream>()
private val reader = CsvReader(stream)
private val bufferedReader = mock<BufferedReader>()
@Test
fun read() {
whenever(bufferedReader.readLine()).thenReturn("Jakub\tSzwiec")
reader.read(bufferedReader) shouldEqual listOf("Jakub", "Szwiec")
}
@Test
fun readWhenEmpty() {
whenever(bufferedReader.readLine()).thenReturn("")
reader.read(bufferedReader) shouldEqual listOf("")
}
@Test
fun throwIOExceptionWhenReadingProblems() {
whenever(bufferedReader.readLine()).thenThrow(IOException::class.java)
val read = { reader.read(bufferedReader) }
read shouldThrow IOException::class
}
}
К сожалению, для тестов мне нужно вызвать приватную функциюfun read(bufferedReader: BufferedReader): List<String>
потому что при насмешке File
, file.bufferedReader
дает NullPointerException
Невозможно смоделировать класс BufferedWriter в junit