我正在尝试在Intellij IDEA(最新的社区版本,最新的Scala插件)中运行scala flatspec测试,但我不断收到"空测试套件"错误.
我尝试右键单击使用正常的"运行"菜单,但它不起作用.我也尝试过创建一个新的ScalaTest配置,但是跑步者仍然没有接受测试.
我能够将JScalaTest与单元一起使用,但我更喜欢使用flatspec语法.
更新:注释类@RunWith(classOf[JUnitRunner])并没有帮助
谢谢!
class SampleTestSpec extends FlatSpec with ShouldMatchers {
"test" should "fail" in {
"this" should equal ("that")
}
}
Run Code Online (Sandbox Code Playgroud)
更新:从ScalaTest切换到Spec,解决了问题.我仍然更喜欢使用FlatSpec的ScalaTest,但这已经足够了.有效的代码:
import org.specs._
object SampleTestSpec extends Specification {
"'hello world' has 11 characters" in {
"hello world".size must be equalTo(113)
}
"'hello world' matches 'h.* w.*'" in {
"hello world" must be matching("h.* w.*")
}
}
Run Code Online (Sandbox Code Playgroud)
-TeO
Scala提供了不同测试框架的选择,但我想知道它们的成熟度和稳定性是否存在差异以及它们提供了哪些独特的功能.
是否有一个特定的适合各种发展的?
不同的框架可以相互交互,也可以与针对其他语言的测试运行者互操作?
如何禁用测试套件,即类扩展中的所有测试FunSpec?
我已经发现的唯一的解决办法是更换it与ignore每次试验前,但它是无聊与几十个测试这样做.
我正在使用simito与scalatest.使用具有值类的匹配器时,我有以下问题.
import org.scalatest.FlatSpec
import org.scalatest.mock.MockitoSugar
import org.mockito.BDDMockito._
import org.mockito.Matchers.any
case class FirstId(val value: String) extends AnyVal
case class SecondId(val value: String) extends AnyVal
trait MockedClass {
def someMethods(firstId: FirstId, secondId: SecondId): Int
}
class ValueClassSpec() extends FlatSpec with MockitoSugar {
val mockedClass = mock[MockedClass]
val secondId = SecondId("secondId")
"Matchers" should "work for value class" in {
// given
given(mockedClass.someMethods(any[FirstId], org.mockito.Matchers.eq(secondId))).willReturn(3)
// when
val result = mockedClass.someMethods(FirstId("firstId"), secondId)
// then
assert(result == 3)
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
ValueClassSpec:
Matchers
- should work …Run Code Online (Sandbox Code Playgroud) 可以在IntelliJ IDEA 12中运行单个选定的JUnit测试方法,但是ScalaTest似乎无法做到这一点.你可以运行整个测试类,或者什么都没有,但是在IntelliJ IDEA 12中似乎没有更好的控制ScalaTest(我还没有尝试过IDEA 13.)
所以,问题是:有没有办法在IntelliJ中只执行一个选定的ScalaTest测试方法(就像使用JUnit测试方法一样).
下面是一个代码示例,其测试方法我想在IntelliJ中单独运行.知道怎么做吗?
我试过JUnitRunner,但没有帮助.
class NodeDAOTest extends FlatSpec with SessionAware with BeforeAndAfter {
before{ IM3_SessionFactory.removeData
println("before is running")}
println("NodeDAOTest constructor.")
def numberOfNodes=initAndCloseDB(transaction{NodeDAO.numberOfNodes})
"Node" can "be added to DB and removed." in {
val n =new TextNode
assert(numberOfNodes===0)
initAndCloseDB { transaction{session save n}}
assert(numberOfNodes===1)
initAndCloseDB { transaction{deleteNode(n)}}
assert(numberOfNodes===0)
}
def getTag= initAndCloseDB {transaction{ session.createQuery("from Tag").list().get(0).asInstanceOf[Tag]}}
def getNode=initAndCloseDB {transaction{ session.createQuery("from Node").list().get(0).asInstanceOf[Node]} }
it can "be tagged and untagged" in {
val t=new Tag
val n=new TextNode
assert(numberOfNodes==0,"before …Run Code Online (Sandbox Code Playgroud) 是否有办法将测试结果截断为仅在单元测试失败时才显示单元测试的结果文本?我正在开发一个包含850个单元测试的Scala项目,成功的单元测试中的绿色文本使得很难专注于失败.
我在说什么的例子:
[info] - should have colors
[info] - should not be dead
//.... x 100
[info] - animals should not be rainbows *** FAILED ***
[info] -"[rainbow]s" was not equal to "[ponie]s" (HappinessSpec.scala:31)
Run Code Online (Sandbox Code Playgroud)
我想要的只是显示失败的东西:
[info] - animals should not be rainbows *** FAILED ***
[info] -"[rainbow]s" was not equal to "[ponie]s" (HappinessSpec.scala:31)
Run Code Online (Sandbox Code Playgroud)
我意识到有test-quicksbt命令,但是在我的情况下它仍然运行300次成功的单元测试,当时只有30次失败.
在使用方面,我正在寻找的东西:
sbt> ~ test -showOnlyFailures
我也很高兴能够在运行单元测试结束时显示所有失败.IIRC,这就是RSpec在Ruby中的工作方式......
我是scala的新手,我正在尝试几个示例代码进行测试.但是,当我运行测试代码时,我遇到了一些问题.当我运行测试时,我收到一个错误
[trace] Stack trace suppressed: run last test:executeTests for the full output.
[error] (test:executeTests) java.lang.NoClassDefFoundError: scala/Product$class
[error] Total time: 3 s, completed Feb 27, 2017 6:57:15 PM
Run Code Online (Sandbox Code Playgroud)
我的代码如下
FilterChecks.scala
class filterChecks extends FlatSpec {
"Filter checker passed a filename which is present in directory" should "return file name" in {
val matchingFileName = new FileObject("match")
val listOfFiles = List(new FileObject("random"), matchingFileName)
val matchedFiles = new FilterChecker("match").findMatchedFiles(listOfFiles)
assert(matchedFiles == List(matchingFileName))
}
}
Run Code Online (Sandbox Code Playgroud)
FilterChecker类
class FilterChecker(filter : String) {
def matches(content : …Run Code Online (Sandbox Code Playgroud) 我还没有找到有关如何执行此操作的任何文档.对于JUnit,等效的是:
mvn -Dtest=org.apache.spark.streaming.InputStreamSuite test
Run Code Online (Sandbox Code Playgroud) 使用ScalaTest 3.0.0 环境:Scala 2.11.8,sbt 0.13.5,IntelliJ 14.1.4
build.sbt只有
// NOTE: not using org.scalactic
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"
Run Code Online (Sandbox Code Playgroud)
下面的测试通过了.但是,IntelliJ在MyMiniTest下面标记了一条波浪形的红线,并带有警告消息:
必须将类'MyMiniTest'声明为abstract或实现抽象成员'convertToLegacyEqualizer [T](左:T):'org.scalactic.TripleEqualsSupport'中的TripleEqualsSupport.this.LegacyEqualizer [T]'
import org.scalatest.FeatureSpec
class MyMiniTest extends FeatureSpec {
scenario("A simple test") {
val a = 12
assert(a * 3 == 36)
}
}
Run Code Online (Sandbox Code Playgroud)
这个警告的原因是什么,推荐的解决方案是什么?
当我尝试在带有Scala 2.13的IntelliJ(2019.1),Scala IntelliJ插件v2019.1.8中运行测试时遇到以下错误:
Exception in thread "ScalaTest-dispatcher" java.lang.NoSuchMethodError: scala.collection.JavaConverters.seqAsJavaListConverter(Lscala/collection/Seq;)Lscala/collection/convert/Decorators$AsJava;
at org.jetbrains.plugins.scala.testingSupport.scalaTest.treeBuilder.ParallelTreeBuilder.getOrdinalList(ParallelTreeBuilder.java:21)
at org.jetbrains.plugins.scala.testingSupport.scalaTest.treeBuilder.ParallelTreeBuilder$SuiteTree.<init>(ParallelTreeBuilder.java:92)
at org.jetbrains.plugins.scala.testingSupport.scalaTest.treeBuilder.ParallelTreeBuilder.initRun(ParallelTreeBuilder.java:261)
at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestReporterWithLocation.apply(ScalaTestReporterWithLocation.java:59)
at org.scalatest.DispatchReporter$Propagator.$anonfun$run$10(DispatchReporter.scala:249)
at org.scalatest.DispatchReporter$Propagator.$anonfun$run$10$adapted(DispatchReporter.scala:248)
at scala.collection.immutable.List.foreach(List.scala:312)
at org.scalatest.DispatchReporter$Propagator.run(DispatchReporter.scala:248)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
以下是我的Gradle依赖项:
dependencies {
implementation 'org.scala-lang:scala-library:2.13.0'
testImplementation 'org.scalatic:scalatic_2.13:3.0.8'
testImplementation 'org.scalatest:scalatest_2.13:3.0.8'
}
Run Code Online (Sandbox Code Playgroud)
当我将依存关系更改为Scala 2.12.x时,测试将在IntelliJ中正确执行而没有错误。这里发生了什么?
scalatest ×10
scala ×9
testing ×3
unit-testing ×2
junit ×1
maven ×1
mockito ×1
sbt ×1
scala-2.13 ×1
specs ×1