JUnit, как настроить тестовый класс? - PullRequest
0 голосов
/ 09 декабря 2018

Я использую конструктор тестового класса для насмешливых объектов.Но я хочу установить параметры для заглушек насмешливых объектов из каждого метода испытаний.Я попытался использовать параметры конструкторов тестового класса, но JUnit ограничил это:

java.lang.Exception: Test class should have exactly one public zero-argument constructor

Что мне следует использовать для этой цели?

Теперь я использую другой класс для макетов магазина, и он не выглядит красиво

package testci

import org.junit.Test
import org.mockito.Mockito.*

interface Object {
    fun get(p: Int): Int
}

class setUpMock(val param: Int, val param2: Int) {
    val mock = mock(Object::class.java)!!
    init {
        `when`(mock.get(param)).thenReturn(param2)
    }
}

class HelloTest {
    @Test
    fun `first test`() {
        val sMock = setUpMock(1,2)
        println(sMock.mock.get(1))
    }

    @Test
    fun `second test`() {
        val sMock = setUpMock(1,3)
        println(sMock.mock.get(1))
        verify(sMock.mock).get(1)
    }
}

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

С Junit5 вы можете достичь этого без дополнительного класса.

import org.junit.jupiter.api.Test
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.CsvSource
import org.mockito.Mockito.*
import kotlin.test.assertEquals

interface Object {
    fun get(p: Int): Int
}

class HelloTest {

    var mock = mock(Object::class.java)!!

    @Test
    fun `first test`() {
        `when`(mock.get(1)).thenReturn(2)
        assertEquals(2, mock.get(1))
    }

    @Test
    fun `second test`() {
        `when`(mock.get(1)).thenReturn(2)
        println(mock.get(1))
        verify(mock).get(1)
    }

    @CsvSource("1,2","3,4")
    @ParameterizedTest
    fun `csv parameterized test`(key: Int, value: Int){
        `when`(mock.get(key)).thenReturn(value)
        assertEquals(value, mock.get(key))
    }
}

Примечание @CsvSource для параметризованных тестов.Существует несколько способов написания параметризованных тестов с junit5. Требуются следующие зависимости.

<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-test-junit</artifactId>
    <version>1.3.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.3.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.3.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>2.22.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>2.22.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.3.1</version>
    <scope>test</scope>
</dependency>
0 голосов
/ 09 декабря 2018

Средство запуска JUnit 4 по умолчанию не предоставляет такой возможности: параметризованные тесты .
Чтобы использовать его, необходимо аннотировать свой класс с помощью класса бегуна Parameterized и определить @Parameterized.Parameters функция, которая устанавливает значения параметров для каждого сценария.

Например:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized::class)
class HelloTest(val param1: Int, val param2: Int) {

    companion object {
        @JvmStatic
        @Parameterized.Parameters
        fun data() = listOf(
                arrayOf(1, 2),
                arrayOf(1, 3)
        )
    }
    @Test
    fun `first test`() {
        val sMock = setUpMock(param1, param2)
        println(sMock.mock.get(1))
    }

    @Test
    fun `second test`() {
        val sMock = setUpMock(param1, param2)
        println(sMock.mock.get(1))
        verify(sMock.mock).get(1)
    }
}

Нет проверенного кода, но вы должны понять.

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