0
閱讀和初始化JSON數據,我試圖用withFixture
方法來初始化我var ip2GeoTestJson
,並用它在我的測試。我能夠通過var year
實現所需的邏輯。我相信我得到(解析JNothing
)錯誤是因爲withFixture
未初始化我ip2GeoTestJson
與JSON引起的。與scalatest withFixture
我目前正在此錯誤:
*** RUN ABORTED ***
An exception or error caused a run to abort: java.lang.ClassCastException was thrown scenario("event.client_ip_address and event_header.client_ip_address both have values") -, construction cannot continue: "org.json4s.JsonAST$JNothing$ cannot be cast to org.json4s.JsonAST$JObject" (IP2GeoTestSuite.scala:51)
代碼:
class IP2GeoTestSuite extends FeatureSpec with SparkContextFixture {
var ip2GeoTestJson: JValue = null
var year: String = null
feature("feature") {
scenario("scenario") {
println(ip2GeoTestJson)
assert(year != null)
assert(ip2GeoTestJson != null)
}
}
def withFixture(test: NoArgTest): org.scalatest.Outcome = {
year = test.configMap("year").asInstanceOf[String]
val ip2GeoConfigFile = test.configMap("config").asInstanceOf[String]
val ip2GeoUrl = getClass.getResourceAsStream(s"/$ip2GeoConfigFile")
val ip2GeoJsonString = Source.fromInputStream(ip2GeoUrl).getLines.mkString("")
System.out.println(ip2GeoJsonString)
ip2GeoTestJson = parse(ip2GeoJsonString)
try {
test()
}
}
}
當關於ip2GeoData
線移動到像這樣的類的頂部,但是我需要的代碼工作正常硬編碼文件名:
class IP2GeoTestSuite extends FeatureSpec with SparkContextFixture {
val ip2GeoConfigFile = "ip2geofile.json"
val ip2GeoUrl = getClass.getResourceAsStream(s"/$ip2GeoConfigFile")
val ip2GeoJsonString = Source.fromInputStream(ip2GeoUrl).getLines.mkString("")
System.out.println(ip2GeoJsonString)
val ip2GeoTestJson = parse(ip2GeoJsonString)
var year: String = null
feature("feature") {
scenario("scenario") {
println(ip2GeoTestJson)
assert(year != null)
assert(ip2GeoTestJson != null)
}
}
def withFixture(test: NoArgTest): org.scalatest.Outcome = {
year = test.configMap("year").asInstanceOf[String]
try {
test()
}
}
}
1)看來你對樣品改變代碼。 2)你有初始化或解析問題。沒有什麼與scalatest。 3)從樣本來看,定義變量似乎毫無用處。特別是超出方法範圍。 4)再從樣品你不使用'OneArgTest' – Zernike
@Zernike我的錯誤,它的意思是'NoArgTest'我做出了修正。是的,我在初始化過程中遇到了麻煩。在第二個示例中,我移動了該方法之外的所有JSON文件解析邏輯,並且它工作正常,但我必須對該文件進行硬編碼。我想抓住從'configMap'文件名和初始化,但我不知道如何得到它的工作 – Liondancer
到您的例子有沒有必要「分流」變量初始化。在特質體中設置'val'(如果它應該初始化一次)或者在方法體中(其他方式)。 – Zernike