Невозможно определить FileOutputStream в тесте Android JUnitAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно определить FileOutputStream в тесте Android JUnit

Сообщение Anonymous »

Я пытаюсь написать модульный тестовый пример для создания файла журнала в папке sdCard устройства. Но я столкнулся с ошибкой инициализации FileOutputStream. Ниже упомянут класс, для которого я пишу тестовый пример.

Код: Выделить всё

@Singleton
class TracLogger @Inject constructor(
private val iTracLogInfo: ITracLogInfo,
@ApplicationContext val context: Context){
private lateinit var logFileOutputStream:FileOutputStream
private lateinit var file:File

init {
val logsFolder = File(logFolder)
if (!logsFolder.exists()) logsFolder.mkdir()
try {
file = File(logsFolder.absolutePath + "/" + iTracLogInfo.appName + "log.txt")
logFileOutputStream = FileOutputStream(file,true)
} catch (e: Exception) {
Log.d(TAG,"writeLogToFile failed with error "+e.message)
}
}

override val logFolder: String
get() {
var path = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
return if(path != null) path.absolutePath + "/logs" else "/sdcard/Download/logs"
}

override fun log(msg: String) {
try {
if(logFileOutputStream != null){
logFileOutputStream.write(formatLog(msg).toByteArray())
logFileOutputStream.flush()
}
} catch (e: IOException) {
Log.d(TAG,"Error in writing log i.e.($msg) to file "+e.message)
}
}
}

interface ITracLogInfo {
val appName: String
val atLeastSizeLimitToUpload: Long
}
Тестовый класс, который я пишу, упомянут ниже:

Код: Выделить всё

@RunWith(JUnit4::class)
class TracLoggerTest {
private lateinit var logger: TracLogger
private var iTracLogInfo: ITracLogInfo = mock()
private val context: Context = mock()

@Before
fun setup() {
Mockito.mockStatic(Log::class.java)
logger = TracLogger(iTracLogInfo, context)
}

@Test
fun testLog() {
val message = "Test message"
logger.log(message)
val logFile = File(logger.logFolder + "/" + iTracLogInfo.appName+"log.txt")
val input = logFile.inputStream()
val output = ByteArrayOutputStream()
val buffer = ByteArray(1024)
var length: Int
while (input.read(buffer).also { length = it } != -1) {
output.write(buffer, 0, length)
}
assertEquals(
"${
DateFormatterUtility.formatDateTimeToString(
Date(),
"MM/dd/yyyy HH:mm:ss.SSS"
)
} : $message \n",
output.toString()
)
}
Ошибка: свойство lateinit logFileOutputStream не было инициализировано в строке if(logFileOutputStream != null){
Как я могу решить проблему?


Подробнее здесь: https://stackoverflow.com/questions/760 ... junit-test
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»