Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ScalaTest时出现java.lang.NoSuchFieldError_Scala_Reflection_Typeclass_Scalatest - Fatal编程技术网

使用ScalaTest时出现java.lang.NoSuchFieldError

使用ScalaTest时出现java.lang.NoSuchFieldError,scala,reflection,typeclass,scalatest,Scala,Reflection,Typeclass,Scalatest,使用ScalaTest时,我遇到了一个很难调试的错误。奇怪的是,当我的程序没有主对象时,这似乎会发生,但当它确实有主对象时却不会发生。我的代码实际上只是使用一个带有多态方法的typeclass从列表中获取一个片段,看起来是这样的(为这个稍微冗长的示例道歉,我已经尽可能地减少了它): 我的测试很简单,在测试目录中自己的文件中如下所示: package sportarray import org.scalatest.flatspec.AnyFlatSpec import org.scalatest

使用ScalaTest时,我遇到了一个很难调试的错误。奇怪的是,当我的程序没有主对象时,这似乎会发生,但当它确实有主对象时却不会发生。我的代码实际上只是使用一个带有多态方法的typeclass从列表中获取一个片段,看起来是这样的(为这个稍微冗长的示例道歉,我已经尽可能地减少了它):

我的测试很简单,在测试目录中自己的文件中如下所示:

package sportarray

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class ArraySpec extends AnyFlatSpec with Matchers {
  "List" should "act as an array" in {
    import ArrayDefs._
    import ArrayDefs.IsArrSyntax._
    import ListOfListsObj._
    val list1d = List1d[Int, Double](List(1,2,3), List(1.0, 2.0, 3.0))
    assert(list1d.getSlice(1) == 2.0)
  }
}
如果我
sbt test
按原样测试此代码,我会得到以下错误:

java.lang.NoSuchFieldError: sportarray$ArrayDefs$IsArrSyntax$IsArrOps$$tc1d
at sportarray.ArraySpec.$anonfun$new$1(HelloSpec.scala:12)
at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85)
at org.scalatest.OutcomeOf.outcomeOf$(OutcomeOf.scala:83)
at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
at org.scalatest.Transformer.apply(Transformer.scala:22)
at org.scalatest.Transformer.apply(Transformer.scala:20)
at org.scalatest.flatspec.AnyFlatSpecLike$$anon$5.apply(AnyFlatSpecLike.scala:1683)
然后,我尝试向程序中添加一个主类,看看这是测试的问题还是代码本身的问题:

object Main extends App {
  import ArrayDefs._
  import ArrayDefs.IsArrSyntax._
  import ListOfListsObj._
  val list1d = List1d[Int, Double](List(1,2,3), List(1.0, 2.0, 3.0))
  assert(list1d.getSlice(1) == 2.0)
}
如果我运行
sbt
,这就可以了,奇怪的是,它还允许我运行
sbt测试
,没有任何问题。如果我随后删除这个主类,
sbt测试再次失败。有人能解释这里发生了什么吗

谢谢你的帮助

实际上我从命令行开始缩放测试,结果成功了

$scalac-cp.:scalactive_2.13-3.2.2.jar:scalatest_2.13-3.2.2.jar:scalatest-core_2.13-3.2.2.jar:scalatest-flatspec_2.13-3.2.2.jar:scalatest-matchers-core_2.13-3.2.2.jar:scalatest-shouldmatchers_2.13-3.2.2.2.jar:scalatest-compatible-3.2.2.2
$scala-cp.:scalatist_2.13-3.2.2.jar:scalatest_2.13-3.2.2.jar:scalatest-core_2.13-3.2.2.jar:scalatest-flatspec_2.13-3.2.2.jar:scalatest-matchers-core_2.13-3.2.2.jar:scalatest-shouldmatchers_2.13-3.2.2.2.2.jar:scalatest-compatible-3.2.2.2.2.jar:
开始跑步。预期测试计数为:1
应用测试:
列表
-应该充当数组
运行在151毫秒内完成。
运行的测试总数:1
套件:已完成1,已中止0
测试:成功1、失败0、取消0、忽略0、挂起0
所有测试都通过了。
在IntelliJ和sbt中,它失败了:

(J)

异常或错误导致运行中止:App$ArrayDefs$isarrssyntax$IsArrOps$$tc1d
java.lang.NoSuchFieldError:App$ArrayDefs$IsArrSyntax$IsArrOps$$tc1d
在AppTest.$anonfun$new$1(AppTest.scala:10)
在org.scalatest.OutcomeOf.OutcomeOf(OutcomeOf.scala:85)
位于org.scalatest.OutcomeOf.OutcomeOf$(OutcomeOf.scala:83)
在org.scalatest.OutcomeOf$.OutcomeOf(OutcomeOf.scala:104)
在org.scalatest.Transformer.apply上(Transformer.scala:22)
在org.scalatest.Transformer.apply上(Transformer.scala:20)
在org.scalatest.flatspec.anyflatspecilike$$anon$5.apply上(anyflatspecilike.scala:1683)
位于org.scalatest.TestSuite.withFixture(TestSuite.scala:196)
位于org.scalatest.TestSuite.withFixture$(TestSuite.scala:195)
位于org.scalatest.flatspec.AnyFlatSpec.withFixture(AnyFlatSpec.scala:1685)
在org.scalatest.flatspec.anyflatspecilike.invokeWithFixture$1(anyflatspecilike.scala:1681)
位于org.scalatest.flatspec.anyflatspecilike.$anonfun$runTest$1(anyflatspecilike.scala:1693)
位于org.scalatest.SuperEngine.runTestImpl(Engine.scala:306)
在org.scalatest.flatspec.anyflatspecilike.runTest上(anyflatspecilike.scala:1693)
位于org.scalatest.flatspec.anyflatspecilike.runTest$(anyflatspecilike.scala:1675)
位于org.scalatest.flatspec.AnyFlatSpec.runTest(AnyFlatSpec.scala:1685)
在org.scalatest.flatspec.anyflatspecilike.$anonfun$runTests$1(anyflatspecilike.scala:1751)
位于org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:413)
位于scala.collection.immutable.List.foreach(List.scala:333)
位于org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401)
位于org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:390)
位于org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:427)
位于scala.collection.immutable.List.foreach(List.scala:333)
位于org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401)
位于org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:396)
位于org.scalatest.SuperEngine.runtestsiml(Engine.scala:475)
在org.scalatest.flatspec.anyflatspecilike.runTests上(anyflatspecilike.scala:1751)
位于org.scalatest.flatspec.anyflatspecilike.runTests$(anyflatspecilike.scala:1750)
位于org.scalatest.flatspec.AnyFlatSpec.runTests(AnyFlatSpec.scala:1685)
位于org.scalatest.Suite.run(Suite.scala:1112)
位于org.scalatest.Suite.run$(Suite.scala:1094)
在org.scalatest.flatspec.AnyFlatSpec.org$scalatest$flatspec$anyflatspecilike$$super$run(AnyFlatSpec.scala:1685)
在org.scalatest.flatspec.anyflatspecilike.$anonfun$run$1(anyflatspecilike.scala:1796)
位于org.scalatest.SuperEngine.runImpl(Engine.scala:535)
在org.scalatest.flatspec.anyflatspecilike.run上(anyflatspecilike.scala:1796)
位于org.scalatest.flatspec.anyflatspecilike.run$(anyflatspecilike.scala:1794)
位于org.scalatest.flatspec.AnyFlatSpec.run(AnyFlatSpec.scala:1685)
在org.scalatest.tools.SuiteRunner.run(SuiteRunner.scala:45)上
在org.scalatest.tools.Runner$.$anonfun$dorunrun$13(Runner.scala:1320)
在org.scalatest.tools.Runner$.$anonfun$dorunrun$13$adapted上(Runner.scala:1314)
位于scala.collection.immutable.List.foreach(List.scala:333)
位于org.scalatest.tools.Runner$.dorunrunrun(Runner.scala:1314)
在org.scalatest.tools.Runner$.$anonfun$runoptionalywithpassfailreporter$24(Runner.scala:993)
在org.scalatest.tools.Runner$.$anonfun$runoptionalywithpassfailreporter$24$adapted(Runner.scala:971)
在org.scalatest.tools.Runner$.withClassLoaderAddispatchReporter(Runner.scala:1480)上
在org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:971)
位于org.scalatest.tools.Runner$.run(Runner.scala:798)
位于org.scalatest.tools.Runner.run(Runner.scala)
在org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2or3(ScalaTestRunner.java:40)
位于org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:27)
(sbt)

[error]java.lang.NoSuchFieldError:App$ArrayDefs$IsArrS
object Main extends App {
  import ArrayDefs._
  import ArrayDefs.IsArrSyntax._
  import ListOfListsObj._
  val list1d = List1d[Int, Double](List(1,2,3), List(1.0, 2.0, 3.0))
  assert(list1d.getSlice(1) == 2.0)
}