小编ryr*_*guy的帖子

在单个DynamoDB更新操作中追加和截断列表?

我想在DynamoDB项目中拥有基本上是封顶的列表.我希望能够将一个项目添加到列表的前面,然后如果超过一定大小则将项目从后面放下.

在我的例子中,我将帽设置为3,前置元素"6",并在状态之前/之后显示:

                    { } -> { "myList": [6] }
      { "myList": [1] } -> { "myList": [6, 1] }
{ "myList": [3, 2, 1] } -> { "myList": [6, 3, 2] }
Run Code Online (Sandbox Code Playgroud)

但我不能使用以下更新表达式来组合SETREMOVE操作myList:

# (":empty" set to an empty list in the value map)
SET myList = list_append(:v, if_not_exists(myList, :empty)) REMOVE myList[3]
Run Code Online (Sandbox Code Playgroud)

尝试使用此表达式会导致异常(使用Java中的Document API):

Invalid UpdateExpression: Two document paths overlap with each other; must remove or rewrite one of these paths
Run Code Online (Sandbox Code Playgroud)

如果我拆分SET并 …

amazon-dynamodb

6
推荐指数
1
解决办法
1426
查看次数

当akka actor在测试线程之外抛出异常时,没有使用scalatest

我有一个情况出现并咬我几次我正在测试一个Actor并且Actor意外地抛出一个异常(由于一个bug),但测试仍然通过.现在大多数情况下,Actor中的异常意味着无论测试验证是否都不正确,因此测试失败,但在极少数情况下这不是真的.异常发生在与测试运行器不同的线程中,因此测试运行器对此一无所知.

一个例子是当我使用mock来验证一些依赖项被调用时,由于Actor代码中的错误,我在mock中调用了一个意外的方法.这导致模拟抛出一个异常,炸毁了演员而不是测试.有时这甚至可能导致下游测试因为Actor如何爆炸而神秘地失败.例如:

// using scala 2.10, akka 2.1.1, scalatest 1.9.1, easymock 3.1
// (FunSpec and TestKit)
class SomeAPI {
  def foo(x: String) = println(x)
  def bar(y: String) = println(y)
}

class SomeActor(someApi: SomeAPI) extends Actor {
  def receive = {
    case x:String  =>
      someApi.foo(x)
      someApi.bar(x)
  }
}

describe("problem example") {
  it("calls foo only when it receives a message") {
    val mockAPI = mock[SomeAPI]
    val ref = TestActorRef(new SomeActor(mockAPI))

    expecting {
      mockAPI.foo("Hi").once()
    }

    whenExecuting(mockAPI) {
      ref.tell("Hi", testActor)
    }
  } …
Run Code Online (Sandbox Code Playgroud)

scala akka scalatest

5
推荐指数
3
解决办法
3369
查看次数

scala:如何链接不同类型的部分函数

我有一个使用链式部分函数处理Web服务请求的模式(我认为这是一个责任链模式?).在我的例子中,假设请求有两个参数,一个字符串Id和一个日期.有一个涉及id的验证步骤,一个检查日期的验证步骤,以及最后使用两者的一些业务逻辑.所以我实现了它们:

object Controller {
  val OK = 200
  val BAD_REQUEST = 400

  type ResponseGenerator = PartialFunction[(String, DateTime), (String, Int)]

  val errorIfInvalidId:ResponseGenerator = {
    case (id, _) if (id == "invalid") => ("Error, Invalid ID!", BAD_REQUEST)
  }

  val errorIfFutureDate:ResponseGenerator = {
    case (_, date) if (date.isAfter(DateTime.now)) => ("Error, date in future!", BAD_REQUEST)
  }

  val businessLogic:ResponseGenerator = {
    case (id, date) => {
      // ... do stuff
      ("Success!", OK)
    }
  }

  def handleRequest(id:String, date:DateTime) = {
    val chained = errorIfInvalidId orElse errorIfFutureDate …
Run Code Online (Sandbox Code Playgroud)

scala

2
推荐指数
1
解决办法
1354
查看次数

标签 统计

scala ×2

akka ×1

amazon-dynamodb ×1

scalatest ×1