class XScanner[T <: SocketClient](
confPath: String = "/etc/default/configPath",
socketClientFactory: String => T
) extends ScannerBase(path)
我的测试代码如下所示:
val t = new XScanner[SocketClient](confPath, (s: String) => mock[SocketClient])
显然,这是无法编译的,因为SocketClient
需要一个到套接字的路径作为参数,但我不能调用mock[SocketClient]
,因为它不是类型,也不能调用mock[SocketClient]
,因为mock不将传递给它的类型的参数作为自己的参数。
那么,如何编写一个模拟socketclient
工厂来传递给我的扫描仪呢?我甚至不知道如何模拟一个需要争论的类!
洞察力是您需要模拟的是socketclientfactory
。然后将其设置为返回模拟socketclient
。
给定:
trait SocketClient {
def frobnicate(): Unit
}
class ScannerBase(path: String)
class XScanner[T <: SocketClient](
confPath: String = "/etc/default/configPath",
socketClientFactory: String => T
) extends ScannerBase(confPath) {
val socket = socketClientFactory("Some Socket Name")
socket.frobnicate
}
(附带说明-永远不能使用confpath
的默认值,因为SocketClientFactory
没有默认值)。
import org.scalatest.FunSuite
import org.scalamock.scalatest.MockFactory
import org.scalamock.generated.GeneratedMockFactory
class ScannerTest extends FunSuite with MockFactory with GeneratedMockFactory {
test("scanner") {
val mockFactory = mockFunction[String, SocketClient]
val mockClient = mock[SocketClient]
mockFactory.expects("Some Socket Name").returning(mockClient)
mockClient.expects.frobnicate
val scanner = new XScanner("path/to/config", mockFactory)
}
}
import org.scalatest.FunSuite
import org.scalamock.scalatest.MockFactory
class ScannerTest extends FunSuite with MockFactory {
test("scanner") {
val mockFactory = mockFunction[String, SocketClient]
val mockClient = mock[SocketClient]
mockFactory.expects("Some Socket Name").returning(mockClient)
(mockClient.frobnicate _).expects()
val scanner = new XScanner("path/to/config", mockFactory)
}
}
我有一个用斯卡拉写的UDF,我希望能够通过Pyspark会话调用它。UDF 采用两个参数:字符串列值和第二个字符串参数。我已经能够成功地调用UDF,如果它只需要一个参数(列值)。如果需要多个参数,我很难调用UDF。以下是到目前为止我在斯卡拉和Pyspark中能够做的事情: Scala UDF: 在Scala中使用它时,我已经能够注册和使用这个UDF: Scala主类: 以上工作成功。下面是Pysp
我正在尝试使用ScalaTest和ScalaCheck进行基于属性的测试。我的测试概述如下: 现在我看到的是,如果我一遍又一遍地运行PropSpec1中的测试,有时第二个测试会通过,但大多数时候会失败。现在,如果0没有被b测试,那么很明显它会通过,但我认为这是它会一直尝试的事情之一。重复运行sbt clean test时,我看到了相同的行为;有时两项测试都通过了。 这对于基于属性的测试是正常的吗,
在计算附加信息时发生内部错误。org.eclipse.jdt.internal.core.SearchableEnvironment.(Lorg/eclipse/jdt/内部/核心/JavaProject; Lorg/eclipse/jdt/核心/WorkingCopyOwner;)
我想用scala中的jackson反序列化json json_结构: {“type”:“struct”,“fields”:[{“name”:“code_role”,“type”:“string”,“nullable”:true,“metadata”:{“HIVE_type_string”:“string”},{“name”:“libelle_role”,“type”:“string”,“nulla
请看下面的代码,让我知道我哪里做错了? 使用: DSE版本-5.1.0 172.31.16.45:9042连接到测试群集。[cqlsh 5.0.1|Cassandra3.10.0.1652|DSE 5.1.0|CQL规范3.4.4|本地协议v4]使用HELP寻求帮助。 谢谢 斯卡拉 斯卡拉 斯卡拉 我在这里什么都得不到?甚至没有错误。
基本上,我在cassandra上运行两个期货查询,然后我需要做一些计算并返回值(值的平均值)。 这是我的代码: 那么问题出在哪里呢? skus.foreach 在 ListBuffer 中追加结果值。由于一切都是异步的,当我尝试在我的主数据库中获取结果时,我得到了一个错误,说我不能被零除。 事实上,由于我的Sku.findSkusByProduct返回一个Future,当我尝试计算平均值时,卷是空