【发布时间】:2020-06-26 09:49:37
【问题描述】:
源代码
class ReportingUtil {
companion object {
private val gson = Gson()
private val amazonSNS = AmazonSNSClientBuilder.standard().build()
private val topicArn = AppConfig.findString(TOPIC_ARN)
}
/**
* This function will convert object to json format and will publish to SNS topic.
* [invoiceData] -
*/
fun publishFailureInvoiceToSNS(invoiceData: InvoiceData) {
val jsonInvoiceMap = gson.toJson(invoiceData)
log.info("The Invoice : $invoiceData is converted to json format : $jsonInvoiceMap")
amazonSNS.publish(topicArn, jsonInvoiceMap)
log.info("Json invoice: $jsonInvoiceMap is published to the sns topic")
}
}
单元测试
@Test
fun `test to publish invoice data to SNS topic`(){
initConfig()
val amazonSNS = mockk<AmazonSNS>()
val invoiceData = InvoiceData("a", "a", "a", BigDecimal(6), "a", "a", mutableMapOf("a" to "a"))
val reportingUtil = ReportingUtil()
every {
amazonSNS.publish("topicArn", "jsonInvoiceMap")
} returns PublishResult().withMessageId("MESSAGE_ID")
reportingUtil.publishFailureInvoiceToSNS(invoiceData)
}
这让我在 src 发布行出现以下错误,
com.amazonaws.services.sns.model.InvalidParameterException:无效 参数:TopicArn 或 TargetArn 原因:required 没有值 参数(服务:AmazonSNS;状态代码:400;错误代码: 无效的参数;请求 ID:5f1732ac-d63e-5e13-964c-65c312e218d7; 代理:空)
我的用例不允许我使用依赖注入,因此我在这里将客户端设为静态。
我还想在催化剂中添加我的自定义优化计划,这也将在构建时触发。在执行之前有什么办法可以做到这一切吗?
【问题讨论】:
标签: unit-testing kotlin amazon-sns mockk