Spek параметризованные тесты

Я пытаюсь написать один тест из примерно 8 часов... Проблема действительно странного поведения (для меня) в Spek. Иногда это выполняется, иногда нет. У меня была ошибка "У тестового класса не может быть двух конструкторов" без какой-либо причины. Когда я удалил class DriverTest(val filePath: String, val expectedTextResult: String) и затем поставить его снова, это сработало... Во всяком случае, я пытаюсь сделать параметризованный тест:

@RunWith(JUnitPlatform::class)
class ChromeDriverConfigurationTest : Spek
({
    class DriverTest(val filePath: String, val expectedTextResult: String)

    given("Chrome Driver") {
        val chromeDriver: ChromeDriver by lazy { setupChromeDriverForTest() }
        afterGroup { deleteChromeDriver(chromeDriver) }

        listOf(
            DriverTest(filePath = "js/js.html", expectedTextResult = "Text from JS!"),
            DriverTest(filePath = "jQuery/jQuery.html", expectedTextResult = "I come from jQuery!"),
            DriverTest(filePath = "angularv1/angularv1.html", expectedTextResult = "Hello from Angular v1!"),
            DriverTest(filePath = "reactJS/index.html", expectedTextResult = "Hello from reactJS!")
        ).forEach { driverTest ->
            println("BBBBBBBBBBBBBBBBBBBBBB")
            val path = ChromeDriverConfigurationTest::class.java.getResource(driverTest.filePath).path
            chromeDriver.get("file://$path")
            it("should extract test") {
                println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
                val text = chromeDriver.findElement(By.id("test")).text
                assert(text == driverTest.expectedTextResult)
            }

        }
    }
})

В этом случае я не вижу никаких "AAAAAAAAAAAAAA..", но я вижу "BBBBBBBB" 4 раза. Это выглядит как, it раздел не работает Хорошо, может быть, что-то не так с chromeDriver.get, давайте прокомментируем это (остальное остается прежним)

//val path = ChromeDriverConfigurationTest::class.java.getResource(driverTest.filePath).path
//chromeDriver.get("file://$path")

Теперь я понимаю...

BBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBB
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

он? в чем дело. Хорошо, давайте переместим контекстную группу внутрь для каждого, как я видел во многих уроках:

@RunWith(JUnitPlatform::class)
class ChromeDriverConfigurationTest : Spek
({
    class DriverTest(val filePath: String, val expectedTextResult: String)

    listOf(
        DriverTest(filePath = "js/js.html", expectedTextResult = "Text from JS!"),
        DriverTest(filePath = "jQuery/jQuery.html", expectedTextResult = "I come from jQuery!"),
        DriverTest(filePath = "angularv1/angularv1.html", expectedTextResult = "Hello from Angular v1!"),
        DriverTest(filePath = "reactJS/index.html", expectedTextResult = "Hello from reactJS!")
    ).forEach { driverTest ->
        given("Chrome Driver") {
            val chromeDriver: ChromeDriver by lazy { setupChromeDriverForTest() }
            afterGroup { deleteChromeDriver(chromeDriver) }
            println("BBBBBBBBBBBBBBBBBBBBBB")
            val path = ChromeDriverConfigurationTest::class.java.getResource(driverTest.filePath).path
            chromeDriver.get("file://$path")
            it("should extract test") {
                println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
                val text = chromeDriver.findElement(By.id("test")).text
                assert(text == driverTest.expectedTextResult)
            }

        }
    }
})

Сюрприз снова:

BBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBB

Ладно, просто оставь эти "читабельность" и заставь это работать... it раздел.

@RunWith(JUnitPlatform::class)
class ChromeDriverConfigurationTest : Spek
({
class DriverTest(val filePath: String, val expectedTextResult: String)

listOf(
    DriverTest(filePath = "js/js.html", expectedTextResult = "Text from JS!"),
    DriverTest(filePath = "jQuery/jQuery.html", expectedTextResult = "I come from jQuery!"),
    DriverTest(filePath = "angularv1/angularv1.html", expectedTextResult = "Hello from Angular v1!"),
    DriverTest(filePath = "reactJS/index.html", expectedTextResult = "Hello from reactJS!")
).forEach { driverTest ->
    given("Chrome Driver") {
        it("should extract test") {
            val chromeDriver: ChromeDriver by lazy { setupChromeDriverForTest() }
            afterGroup { deleteChromeDriver(chromeDriver) }
            println("BBBBBBBBBBBBBBBBBBBBBB")
            val path = ChromeDriverConfigurationTest::class.java.getResource(driverTest.filePath).path
            chromeDriver.get("file://$path")
            println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
            val text = chromeDriver.findElement(By.id("test")).text
            assert(text == driverTest.expectedTextResult)
        }

    }
}
}) 

О, здорово, это работает! Но подождите секунду..., он выполняет только 1 тест, я имею в виду только первый элемент в списке. Он? Может ли кто-нибудь объяснить мне, пожалуйста, это поведение? Также, может быть, вы знаете некоторые другие альтернативы Spek? Я бы написал свои тесты в Котлине. Но с Spek это выглядит практически невозможно

0 ответов

Другие вопросы по тегам