мой модульный тест не проходит из-за растрового изображения не может быть создано - PullRequest
0 голосов
/ 17 января 2019

Я не могу проверить эту функцию getGeneratedBitmap , поскольку растровое изображение не может быть создано.

import android.graphics.Bitmap

class BitmapGenerator(query: String, private val width: Int, private val height: Int) {

    private var sizeExpansion: SizeExpansion = SizeExpansion(query, width, height)

    private var bitmap: Bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)

    private var expandedQuery: String

    private var colors: IntArray

    private var colorsLength: Int = 0

    init {
        colorsLength = sizeExpansion.getExpectedLength()
        expandedQuery = sizeExpansion.getExpandedString()
        colors = IntArray(colorsLength)
        generateColorArray()
    }

    private fun generateColorArray(): IntArray {
        for (x in 0 until colorsLength) {
            colors[x] = ColorGenerator().generateColorAccToChar(expandedQuery[x])
        }
        return colors
    }

    fun getGeneratedBitmap(): Bitmap {
        bitmap.setPixels(colors, 0, width, 0, 0, width, height)
        return bitmap
    }
}

Я пытаюсь проверить это:

import org.junit.Test

import org.junit.Assert.*

class BitmapGeneratorTest {

@Test
fun getGeneratedBitmap() {
    assertNotEquals(BitmapGenerator("salih",25,25).getGeneratedBitmap(),null)
}
}

Когда я запускаю этот тест, он выдает исключение на Bitmap.createBitmap

java.lang.IllegalStateException: Bitmap.createBitmap(widt… Bitmap.Config.ARGB_8888) must not be null

Ответы [ 2 ]

0 голосов
/ 17 января 2019

и IllegalStateException - это нечто иное, чем несостоятельная диссертация.

эти строки выглядят странно для меня, потому что аргументы (вероятно) не были ранее назначены:

private var sizeExpansion: SizeExpansion = SizeExpansion(query, width, height)
private var bitmap: Bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)

Я вижу private val width: Int, private val height: Int ... но все еще удивляюсь.

сначала определите var bitmap: Bitmap и присвойте значение init {} (как может указывать имя).

... и переместите тест на src/androidTest.

0 голосов
/ 17 января 2019

это в (/ src / test / java /)

Это модульные тесты JVM, которые запускаются без какой-либо среды выполнения Android. Обычно модульные тесты JVM настраиваются таким образом, чтобы методы платформы Android возвращали значения по умолчанию. null - это значение по умолчанию для метода, возвращающего ссылочный тип, например Bitmap.createBitmap(). Попытка присвоить это значение NULL ненулевому типу вызывает исключение времени выполнения.

Два общих подхода:

  • Рефакторинг кода таким образом, чтобы площадь поверхности для методов Android SDK была минимизирована, чтобы вы могли тестировать большую часть кода с помощью простых модульных тестов JVM. Здесь помогают различные архитектурные схемы MV *.

  • Запустите свои тесты с зависимостями Android в среде выполнения Android, то есть сделайте его тестом для Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...