【问题标题】:Mocking DynamoDB in Spark with Mockito使用 Mockito 在 Spark 中模拟 DynamoDB
【发布时间】:2019-10-25 04:30:21
【问题描述】:

我想模拟实用程序函数 dynamoDBStatusWrite,这样当我的 spark 程序运行时,它不会碰到 DynamoDB。

下面是我的模拟和测试用例的东西

class FileConversion1Test extends FlatSpec with MockitoSugar with Matchers with ArgumentMatchersSugar with SparkSessionTestWrapper {
  "File Conversion" should "convert the file to" in {

    val utility = mock[Utilities1]
    val client1 = mock[AmazonDynamoDB]
    val dynamoDB1 =mock[DynamoDB]
    val dynamoDBFunc = mock[Utilities1].dynamoDBStatusWrite("test","test","test","test")
    val objUtilities1 = new Utilities1

    FieldSetter.setField(objUtilities1,objUtilities1.getClass.getDeclaredField("client"),client1)
    FieldSetter.setField(objUtilities1,objUtilities1.getClass.getDeclaredField("dynamoDB"),dynamoDB1)

    FieldSetter.setField(objUtilities1,objUtilities1.getClass.getField("dynamoDBStatusWrite"),dynamoDBFunc)

    when(utility.dynamoDBStatusWrite("test","test","test","test")).thenReturn("pass")

    assert(FileConversion1.fileConversionFunc(spark,"src/test/inputfiles/userdata1.csv","parquet","src/test/output","exec1234567","service123")==="passed")

  }
}

我的 spark 程序不应该尝试连接 dynamoDB。但正在尝试连接

【问题讨论】:

    标签: scala apache-spark mockito amazon-dynamodb scalatest


    【解决方案1】:

    你有两个问题,对于初学者来说,你模拟的东西不会在你的系统中自动替换它,你需要构建你的软件以便注入组件,所以在测试中你将提供一个模拟版本他们。即,fileConversionFunc 应该接收另一个参数,其中包含与 Dynamo 的连接器。

    也就是说,模拟库/3rd 方类被认为是一种不好的做法,您应该在那里创建自己的组件来封装与 Dynamo 的交互,然后模拟您的组件,因为它是您控制的 API。 你可以找到here的详细解释

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 2018-07-31
      • 2019-11-07
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多