问题描述
我正在使用ScalarDB
。它在Cassandra
上提供ACID功能。 -https://scalar-labs.github.io/scalardb/javadoc/
ScalarDB
是基于Java
的,我正在Scala
代码中使用它
使用Cassandra
在Scalardb
中插入值的方法是调用Put
方法。例如
def add() = {
val putAnswer: Put = new Put(pAnswerKey)
.forNamespace(keyspaceName)
.forTable(tablename)
.withCondition(mutationCondition)
.withValue(new TextValue("answer_id",answer.answer_id.get.toString))
.withValue(new TextValue("image",convertimageToString(imageData)))
.withValue(new TextValue("answer",convertAnswersFromModelToString(answer.answer)))
.withValue(new BigIntValue("creation_year",answer.creationYear.getorElse(0)))
.withValue(new BigIntValue("creation_month",answer.creationMonth.getorElse(0)))
.withValue(new TextValue("notes",answer.notes.getorElse("")))
logger.trace(s"putting answer ${putAnswer}")
transaction.put(putAnswer)
....
}
我想通过捕获传递到add
的参数来对put
方法进行单元测试。我被困在一个我不知道如何将Value
传递给put
的地方。如何将强制类型转换为必需值?
repository.add(repoTestEnv.mockdistributedTransaction,repoTestEnv.answerTestEnv.answerOfAPracticeQuestion) val argumentsCaptor = ArgumentCaptor.forClassput,Put
verify(repoTestEnv.mockdistributedTransaction,times(1)).put(argumentCaptor.capture())
val argumentsInvoked = argumentCaptor.getAllValues
argumentsInvoked.size mustBe 1
val argument = argumentsInvoked.get(0)
val values = argument.getValues //this is util.Map[String,Value[_]]
logger.trace(s"arguments were ${argument.getValues}") //this prints the following
{answer_id=TextValue{name=answer_id,value=Optional[11111111-1111-1111-1111-111111111111]},image=TextValue{name=image,value=Optional[{"image":["image1binarydata","image2binarydata"]}]},answer=TextValue{name=answer,value=Optional[{"answer":[{"filename":"c.js","answer":"some answer"}]}]},creation_year=BigIntValue{name=creation_year,value=2019},creation_month=BigIntValue{name=creation_month,value=12},notes=TextValue{name=notes,value=Optional[some notes]}}
问题-我不知道如何进一步选择每个值并进行比较。
解决方法
由于Value
是一个接口,因此我不得不像下面这样对它进行类型转换。
val value = values.get("answer_id").asInstanceOf[TextValue]
value.getString.isPresent mustBe true
value.getString.get() mustBe "11111111-1111-1111-1111-111111111111"
,
您为什么不创建预期的看跌期权并通过Mockito进行验证?