java.lang.NumberFormatException:对于输入字符串:“ 505c621128f97f31c5870f2a9e2d274fa432bd0

时间:2019-03-27 18:20:38

标签: scala sbt

运行sbt测试,出现以下错误消息:

error] java.lang.NumberFormatException: For input string: "505c621128f97f31c5870f2a9e2d274fa432bd0e"
[error]         at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
[error]         at java.lang.Long.parseLong(Long.java:589)
[error]         at java.lang.Long.parseLong(Long.java:631)
[error]         at scala.collection.immutable.StringLike.toLong(StringLike.scala:305)
[error]         at scala.collection.immutable.StringLike.toLong$(StringLike.scala:305)
[error]         at scala.collection.immutable.StringOps.toLong(StringOps.scala:29)
[error]         at sbt.TestStatus$.$anonfun$read$1(TestStatusReporter.scala:42)
[error]         at sbt.TestStatus$.$anonfun$read$1$adapted(TestStatusReporter.scala:42)
[error]         at scala.collection.Iterator.foreach(Iterator.scala:937)
[error]         at scala.collection.Iterator.foreach$(Iterator.scala:937)
[error]         at scala.collection.AbstractIterator.foreach(Iterator.scala:1425)
[error]         at sbt.TestStatus$.read(TestStatusReporter.scala:42)
[error]         at sbt.TestStatusReporter.succeeded$lzycompute(TestStatusReporter.scala:20)
[error]         at sbt.TestStatusReporter.succeeded(TestStatusReporter.scala:20)
[error]         at sbt.TestStatusReporter.doComplete(TestStatusReporter.scala:31)
[error]         at sbt.TestFramework$.$anonfun$createTestTasks$7(TestFramework.scala:240)
[error]         at sbt.TestFramework$.$anonfun$createTestTasks$7$adapted(TestFramework.scala:240)
[error]         at sbt.TestFramework$.$anonfun$safeForeach$1(TestFramework.scala:150)
[error]         at sbt.TestFramework$.$anonfun$safeForeach$1$adapted(TestFramework.scala:149)
[error]         at scala.collection.Iterator.foreach(Iterator.scala:937)
[error]         at scala.collection.Iterator.foreach$(Iterator.scala:937)
[error]         at scala.collection.AbstractIterator.foreach(Iterator.scala:1425)
[error]         at scala.collection.IterableLike.foreach(IterableLike.scala:70)
[error]         at scala.collection.IterableLike.foreach$(IterableLike.scala:69)
[error]         at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
[error]         at sbt.TestFramework$.safeForeach(TestFramework.scala:149)
[error]         at sbt.TestFramework$.$anonfun$createTestTasks$1(TestFramework.scala:226)
[error]         at sbt.Tests$.$anonfun$testTask$1(Tests.scala:231)
[error]         at sbt.Tests$.$anonfun$testTask$1$adapted(Tests.scala:231)
[error]         at sbt.std.TaskExtra$$anon$1.$anonfun$fork$2(TaskExtra.scala:110)
[error]         at sbt.std.Transform$$anon$3.$anonfun$apply$2(System.scala:46)
[error]         at sbt.std.Transform$$anon$4.work(System.scala:67)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:269)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]         at sbt.Execute.work(Execute.scala:278)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:269)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] java.lang.NumberFormatException: For input string: "505c621128f97f31c5870f2a9e2d274fa432bd0e"
[info] ScalaTest
[info] Run completed in 522 milliseconds.
[info] Total number of tests run: 3
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 3, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[info] Passed: Total 3, Failed 0, Errors 0, Passed 3 

如您所见,所有测试均通过。怎么了?提示,我正在使用Intellij。

更新

这是代码:

import atto._
import Atto._
import cats._
import cats.implicits._

sealed trait PcpPair

case class PcpHead(key: String, value: String) extends PcpPair

case class PcpFieldValue(field: String, value: String) extends PcpPair

case class Pcp(head: List[PcpHead], fv: List[PcpFieldValue], body: String)


object PcpProtocol {

  implicit val pcpProtocol: Protocol[Pcp] = new Protocol[Pcp] {
    override def encode(text: String): ProtocolResult[Pcp] =
      doc
        .parseOnly(text)
        .either
        .flatMap { t =>
          isValidPcp(t._1) match {
            case true => Right(t)
            case false => Left("It is not a valid PCP protocol.")
          }
        }
        .map(t => Pcp(filterPcpHead(t._1), filterFieldValue(t._1), t._2))

    override def decode(msg: Pcp): String = ???
  }

  private val PcpValidity = "pcp-"

  private val key = stringOf(letter | char('-'))
  private val value = stringOf(notChar('\n'))
  private val kv = (key <~ char(':')) ~ value
  private val kvs = sepBy(kv, char('\n'))
  private val doc = (kvs <~ string("\n\n")) ~ takeText


  private val isValidPcp: List[(String, String)] => Boolean = textList =>
    textList
      .map(kv => kv._1.startsWith(PcpValidity))
      .foldLeft(true)(_ || _)

  private val filterPcpHead: List[(String, String)] => List[PcpHead] = textList =>
    textList
      .filter(text => text._1.contains(PcpValidity))
      .map(text => PcpHead(text._1, text._2))

  private val filterFieldValue: List[(String, String)] => List[PcpFieldValue] = textList =>
    textList
      .filter(text => !text._1.contains(PcpValidity))
      .map(text => PcpFieldValue(text._1, text._2))

  private val decodeHead: List[PcpHead] => String = heads =>
    heads.foldLeft("") { (acc, value) =>
      acc |+| value.key |+| ":" |+| value.value |+| "\n"
    }

  private val decodePair: List[PcpPair] => ((String, PcpPair) => String) => String = pcpList => fnPcp =>
    pcpList.foldLeft("")(fnPcp)

}

这是测试:

class PcpParserSpec extends FunSpec with Matchers {

  val valid =
    """pcp-action:MESSAGE
      |pcp-channel:apc\:///
      |pcp-body-type:text
      |PUBLICKEY:THISPK
      |TOPIC:SEND
      |
      |Hello Foo""".stripMargin

  describe("Receive message from SAP server") {


    it("should contains pcp-channel:apc") {
      Protocol.encode(valid) should be('right)
    }

    it("should be separated by head and body") {
      Protocol.encode(valid) match {
        case Right(value) => assert(value.head.length > 0)
        case Left(text) => assert(text.length > 0)
      }
    }

    describe("The body of the message") {

      it("should contains Hello Foo") {

        Protocol.encode(valid) match {
          case Right(value) => assert(value.body == "Hello Foo")
          case Left(text) => assert(text.length > 0)
        }
      }
    }

  }

  describe("Send message to SAP") {

    it("should encode appropriate PCP protocol") {

    }

  }

}

1 个答案:

答案 0 :(得分:1)

您可能会发现target/streams/test/test/\$global/streams/succeeded_tests(在您的项目目录中)出现乱码。 (我的是一团乱码。)

您应该得到类似的东西

#Successful Tests
#Thu Apr 04 07:54:33 NZDT 2019
MyTest=1554317673393

它试图读取的数字在=之后。

(对我而言)令人困惑的一点是它正在输出摘要-解析失败时我的并没有。

在运行以下操作之前,可以在这里的评论中分享succeeded_tests(上)的(某些)内容吗(我很好奇看到这些失败)。 / p>

sbt clean test应该可以解决您的问题...