我知道可以通过在sbt中运行来运行单个测试
testOnly *class -- -n Tag
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉sbt/scalatest在没有标签的情况下运行单个测试?例如:
testOnly *class -- -X 2
Run Code Online (Sandbox Code Playgroud)
这意味着"在课堂上进行第二次测试.无论是什么".我们有一堆测试,没有人费心去标记它们,所以有没有办法在没有标签的情况下运行单个测试?
升级到macOS Sierra后,我似乎遇到了"sbt test"性能问题.在以前版本的OS X上花了大约40-50秒才完成.macOS Sierra时代要高得多.我上次跑的时间大约是15分钟.编译时间与'El Capitan'大致相同.
我是团队中唯一一个尝试这个新macOS的人,所以我不知道它是否只发生在我的Mac上,还是一个普遍的问题.
我的同事在Ubuntu上有类似的问题,它与随机数生成有关,减慢了测试速度 - 服务响应速度慢时间:Java SecureRandom&/ dev/random
不幸的是,这对我不起作用.最初我在JDK 8u54上试过,然后尝试更新到JDK 8u102,这也没有帮助.
PS我正在运行Macbook Pro Mid-2015 2.8GHz i7,16GB RAM,1TB SSD.
我正在尝试将ScalaTest合并到我的Java项目中; 用ScalaTests替换所有JUnit测试.有一次,我想检查Guice的Injector是否注入了正确的类型.在Java中,我有一个这样的测试:
public class InjectorBehaviour {
@Test
public void shouldInjectCorrectTypes() {
Injector injector = Guice.createInjector(new ModuleImpl());
House house = injector.getInstance(House.class);
assertTrue(house.door() instanceof WoodenDoor);
assertTrue(house.window() instanceof BambooWindow);
assertTrue(house.roof() instanceof SlateRoof);
}
}
Run Code Online (Sandbox Code Playgroud)
但是我在使用ScalaTest时遇到了同样的问题:
class InjectorSpec extends Spec {
describe("An injector") {
it("should inject the correct types") {
val injector = Guice.createInjector(new ModuleImpl)
val house = injector.getInstance(classOf[House])
assert(house.door instanceof WoodenDoor)
assert(house.window instanceof BambooWindow)
assert(house.roof instanceof SlateRoof)
}
}
}
Run Code Online (Sandbox Code Playgroud)
它抱怨说,价值instanceof是不是成员Door/ Window/ Roof.我不能instanceof在Scala中使用这种方式吗?
有谁知道如何在ScalaTest中显示自定义失败消息?
例如:
NumberOfElements() should equal (5)
Run Code Online (Sandbox Code Playgroud)
失败时显示以下消息:
10不等于5
但我想要更多描述性的消息,如:
NumberOfElements应为5.
我有一套最新的测试,可以测试RESTful API的不同端点.我真的希望将它们分成不同的文件以获得最佳组织.
我的问题是如何在所有测试之前启动某些东西(在我的情况下是一个HTTP服务器,但它并不重要),并在完成所有测试后将其关闭.
我知道BeforeAndAfterAll,但这只能在一个测试文件内部/之后完成.我需要类似的东西,但对于所有测试,例如:
- 在测试之前启动http服务器
- 运行所有测试套件
- 关闭http服务器
我开始研究Scala Koans,它是围绕一系列单元测试组织的,需要填充空白.(这个想法是在类似的Ruby Koans项目之后建模的.)你启动了运行测试的sbt工具,并告诫:
[info] + ***************************************** [info] + [info] + [info] + [info] + Please meditate on koan "None equals None" of suite "AboutEmptyValues" [info] + [info] + [info] + [info] + *****************************************
...所以你去看看这个单元测试它说:
test("None equals None") {
assert(None === __)
}
......并且,在冥想之后,你意识到你应该填写这样的空白:
test("None equals None") {
assert(None === None)
}
......然后它继续进行下一次单元测试.
不过,我的问题是这个===运算符是什么?我似乎无法在任何地方找到它.这是Scala Koans项目本身定义的DSL运营商吗?或者它是ScalaTest框架的一部分?或者在Scala中?
堆栈跟踪被截断 - 例如它们以 [info] ...
使用last或更改traceLevel没有帮助 - 它只是打印sbt包装器的完整堆栈跟踪.
这是用testng测试的(我也相信使用scalatest和sl4j)
import org.scalatest.{ FlatSpec, Matchers, ParallelTestExecution }
import org.scalatest.concurrent.ScalaFutures
import org.apache.thrift.TApplicationException
class Test extends FlatSpec with Matchers with ScalaFutures with ParallelTestExecution {
it should "throw org.apache.thrift.TApplicationException for invalid Ids" in {
val future: Future[Response] = ThriftClient.thriftRequest
whenReady(future) {
res => {
intercept[TApplicationException] {
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:如何在没有阻塞的情况下断言期货中的预期失败?以上不起作用,在intercept块之前抛出异常.
我正在尝试对一些非常集合的Scala进行单元测试.这些集合作为返回Iterable[T],因此我对集合的内容感兴趣,即使基础类型不同.这实际上是两个相关的问题:
总之,我在ScalaTest中看到Scala等效的NUnit CollectionAssert.AreEqual(有序)和CollectionAssert.AreEquivalent(无序):
Set(1, 2) should equal (List(1, 2)) // ordered, pass
Iterable(2, 1) should equal (Iterable(1, 2)) // unordered, pass
Run Code Online (Sandbox Code Playgroud) scalatest ×10
scala ×9
sbt ×3
java ×2
unit-testing ×2
comparison ×1
junit ×1
macos-sierra ×1
matcher ×1
scala-2.9 ×1
slf4j ×1
testing ×1
testng ×1