Neo4j процедура тестирования и тестирования сервера - PullRequest
0 голосов
/ 28 мая 2018

Я создаю процедуру Neo4J для импорта данных RDF.Данные RDF имеют немного сложной структурной информации, и я пишу тесты для каждого случая (некоторые тройки создают метки, некоторые свойства, некоторые отношения и т. Д.).

Процедуры написаны на Kotlin.

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

org.neo4j.kernel.impl.core.ThreadToStatementContextBridge$BridgeDatabaseShutdownException: This database is shutdown.

Я новичок в Neo4J, и я изо всех сил пытаюсь найтиХорошие примеры, вот структура тестового примера:

package mypackage

import org.junit.Assert
import org.junit.Rule
import org.junit.Test
import org.neo4j.driver.internal.value.NullValue

import org.neo4j.driver.v1.Config
import org.neo4j.driver.v1.GraphDatabase
import org.neo4j.harness.junit.Neo4jRule

import java.io.File
import java.net.URI

class PropertyParserTest {

    // this rule starts a Neo4j instance
    @Rule
    @JvmField
    var neo4j: Neo4jRule = Neo4jRule()
            // This is the procedure/function to test
            .withProcedure(Mypackage::class.java)

    @Test
    @Throws(Throwable::class)
    fun shouldSetTheNameCorrectly() {

        GraphDatabase.driver(neo4j.boltURI(), Config.build().withoutEncryption().toConfig()).use({ driver ->
            driver.session().use({ session ->
                // Given
                val path: String = File("src/test/resources/test_rdf__1.ttl").getAbsolutePath()
                val testFile = File(path)
                val urlTestFile: URI = testFile.toURI()
                session.run("CALL mypackage.import('${urlTestFile}')")

                // When
                val result = session.run("MATCH (n) WHERE n:Person RETURN n.name as name")

                // Then
                var rec = result.next()
                Assert.assertEquals("Manuel, Niklaus (Niclaus)", rec.get("name").asString())
                rec = result?.next()
                Assert.assertEquals("Fischli / Weiss", rec.get("name").asString())
                rec = result?.next()
                Assert.assertEquals("Hodler, Ferdinand", rec.get("name").asString())
            })
        })
    }

    @Test
    @Throws(Throwable::class)
    fun shouldSetTheAlternateNameCorrectly() {

        GraphDatabase.driver(neo4j?.boltURI(), Config.build().withoutEncryption().toConfig()).use({ driver ->
            driver.session().use({ session ->
                // Given
                val path: String = File("src/test/resources/test_rdf_2.ttl").absolutePath
                val testFile = File(path)
                val urlTestFile: URI = testFile.toURI()
                session.run("CALL mypackage.import('${urlTestFile}')")

                // When
                val result = session.run("MATCH (n) WHERE n:Person RETURN n.name as name, n.alternate_names as alternate_names")

                // Then
                var rec = result.next()
                Assert.assertEquals("Holbein, Hans", rec.get("name").asString())
                var alternateNames = rec.get("alternate_names").asList()
                Assert.assertEquals(9, alternateNames.size)
                Assert.assertEquals("Holpenius, Joannes", alternateNames[0])
                Assert.assertEquals("Olpenius, Hans", alternateNames[8])

                rec = result.next()
                Assert.assertEquals("Manuel, Niklaus (Niclaus)", rec.get("name").asString())
                alternateNames = rec.get("alternate_names").asList()
                Assert.assertEquals(8, alternateNames.size)
                rec = result.next()
                Assert.assertEquals("Fischli / Weiss", rec.get("name").asString())
                Assert.assertTrue(rec.get("alternate_names") is NullValue)

                rec = result.next()
                Assert.assertEquals("Hodler, Ferdinand", rec.get("name").asString())
                Assert.assertTrue(rec.get("alternate_names") is NullValue)

                rec = result.next()
                Assert.assertEquals("Holbein", rec.get("name").asString())
                alternateNames = rec.get("alternate_names").asList()
                Assert.assertEquals(3, alternateNames.size)

            })
        })    
    }    
}

Есть идеи?Я использую эту базу кода в качестве отправной точки: https://github.com/jbarrasa/neosemantics/blob/3.3/src/test/java/semantics/RDFImportTest.java

1 Ответ

0 голосов
/ 28 мая 2018

хорошо, я действительно нашел код в моей процедуре, выполняющейся вне транзакции, и я думаю, что это может быть причиной проблемы.Когда я группирую все в одной транзакции, у меня больше нет этой проблемы.

Я не совсем уверен, почему это работает для отдельных тестов и дает сбой при выполнении всего тестового примера, но это работает сейчас.

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