testing - Neo4j程序测试和测试服务器
问题描述
我正在创建一个 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
解决方案
好的,我实际上在我的程序中发现了一个在事务之外执行的代码,我认为这可能是问题的原因。当我将所有内容分组到一个事务中时,我不再有这个问题了。
我不完全确定为什么它适用于单个测试并且在运行整个测试用例时会失败,但是现在可以了。
推荐阅读
- ruby-on-rails - 如何修复设计密码重置流程的不稳定 Capybara 测试
- javascript - 我的机器人找不到目录,即使它确实存在 discordjs
- slack-api - 已删除的预定消息仍在发送
- javascript - 比较 JSON 数组 nodeJS 中的单个对象
- python - 将 JustPy 部署到 Heroku
- javascript - 使用对象查找处理行时文件读取流的事件处理程序中的内存泄漏
- reactjs - 我正在尝试显示来自 TMDB API 的图像,但我的代码不起作用
- javascript - React JS 将日期从 yyyy-mm-dd 转换为 dd-mm-yyyy
- kotlin - 如何细化返回类型的泛型参数?
- reactjs - 使用react-player时如何在视频播放1分钟时显示一个按钮?