首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试传递给ScalarDB函数的参数

如何测试传递给ScalarDB函数的参数
EN

Stack Overflow用户
提问于 2020-09-14 14:03:47
回答 2查看 29关注 0票数 0

我正在使用ScalarDB。它通过Cassandra提供ACID功能。- https://scalar-labs.github.io/scalardb/javadoc/

ScalarDB是基于Java的,我正在Scala代码中使用它

使用ScalardbCassandra中插入值的方法是调用Put方法。例如:

代码语言:javascript
复制
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)
....
}

我想通过捕获传递给put的参数来对add方法进行单元测试。我被困在一个地方,我不知道如何将Value传递给put。如何将类型转换为所需的值?

repository.add(repoTestEnv.mockDistributedTransaction,repoTestEnv.answerTestEnv.answerOfAPracticeQuestion) val argumentCaptor = ArgumentCaptor.forClassPut,Put

代码语言:javascript
复制
  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]}}

问题-我不知道如何进一步挑选每个值并进行比较。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-14 16:50:17

因为Value是一个接口,所以我不得不像下面这样对它进行类型转换。

代码语言:javascript
复制
val value = values.get("answer_id").asInstanceOf[TextValue]
      value.getString.isPresent mustBe true
      value.getString.get() mustBe "11111111-1111-1111-1111-111111111111"
票数 0
EN

Stack Overflow用户

发布于 2020-09-15 12:29:13

为什么不用Mockito创建一个预期的Put和验证呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63878869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档