-1
我正在逐步完成我的第一個Scala項目,特別是在查看解析器組合器。我無法獲得簡單的單元測試場景,並試圖瞭解我錯過了什麼。模式匹配單元測試中的ParseResult
我被模式匹配ParseResult模式成功,失敗和錯誤的案例類。我無法讓Scala解決案例類。這裏有幾個例子,但它們似乎都在解析器類的擴展中使用它們。例如,tests on github位於同一個包中。示例here位於擴展解析器的類中。
測試我想寫的樣子:
package test.parsertests
import parser.InputParser // my sut
import scala.util.parsing.combinator._
import org.scalatest.FunSuite
class SetSuite extends FunSuite {
val sut = new InputParser()
test("Parsing a valid command") {
val result = sut.applyParser(sut.commandParser, "SOME VALID INPUT")
result match {
case Success(x, _) => println("Result: " + x.toString) // <-- not found: value Success
case Failure(msg, _) => println("Failure: " + msg) // similar
case Error(msg, _) => println("Error: " + msg) // similar
}
}
}
,我調用該方法的目的是讓我exersize我的每一個解析器在我的SUT:
package parser
import scala.util.parsing.combinator._
import scala.util.parsing.combinator.syntactical._
class InputParser extends StandardTokenParsers {
def commandParser: Parser[Command] =
("Command " ~> coord ~ coord ~ direction) ^^ { case x ~ y ~ d => new Command(x, y, d) }
def applyParser[T](p: Parser[T], c: String): ParseResult[T] = {
val tokens = new lexical.Scanner(c)
phrase(p)(tokens)
}
根本的問題是在我的測試範圍內解決案例類。基於解析器類的source,我怎樣才能定義它們?我可以通過一些額外的導入語句來解決這個問題嗎,還是隻能通過繼承來訪問?我嘗試了所有可以解決這個問題的組合,但我顯然在這裏錯過了一些東西。
可以在這裏發佈您的InputParser代碼或github的要點? – Biswanath
我已經填寫了更多的InputParser類代碼片段 –