Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 为amazonSNS.publish()编写测试用例时出错_Unit Testing_Kotlin_Amazon Sns_Mockk - Fatal编程技术网

Unit testing 为amazonSNS.publish()编写测试用例时出错

Unit testing 为amazonSNS.publish()编写测试用例时出错,unit-testing,kotlin,amazon-sns,mockk,Unit Testing,Kotlin,Amazon Sns,Mockk,Src代码 class ReportingUtil { companion object { private val gson = Gson() private val amazonSNS = AmazonSNSClientBuilder.standard().build() private val topicArn = AppConfig.findString(TOPIC_ARN) } /** * This f

Src代码

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)
}
@测试
fun`将发票数据发布到SNS主题的测试`(){
initConfig()
val amazonSNS=mockk()
val invoiceData=invoiceData(“a”、“a”、“a”、BigDecimal(6)、“a”、“a”、可变映射函数(“a”到“a”))
val reportingUtil=reportingUtil()
每{
amazonSNS.publish(“topicArn”、“jsonInvoiceMap”)
}返回PublishResult().withMessageId(“MESSAGE_ID”)
报告直至发布失败发票(发票数据)
}
这在src发布行上给了我以下错误,

com.amazonaws.services.sns.model.InvalidParameterException:无效 参数:TopicArn或Targetran原因:无所需的值 参数(服务:AmazonSN;状态代码:400;错误代码: 无效参数;请求ID:5f1732ac-d63e-5e13-964c-65c312e218d7; 代理:空)

我的用例不允许我使用依赖注入,因此我在这里使客户机是静态的


我还想在catalyst中添加自定义优化计划,这也将在构建时触发。在执行之前有没有办法完成所有这些工作?

您模拟的
AmazonS
不是用于在
publishFailureInvoiceToSNS
中发布数据的。因此,当您调用publishFailureInvoiceToSNS时,实际上是在调用真正的SNSAPI

您必须重构代码以使用某种依赖项注入。至少你应该让它可配置。没有“不允许使用DI”的用例


若您使用的是JUnit5,那个么您可以在测试中为AWS客户端注入。我还建议将其用于单元测试。

好的,但由于某些原因……我不允许在这里使用DI。在这种情况下我怎么能模仿它呢?说出原因吧?这基本上是一个实用程序包…这个包将被我的许多客户集成。这些客户机使用spring、guice、dagger框架等,所以如果我使用这些框架中的任何一个,都会出现问题,所以提供客户机只是他们的责任。看,您正在使用
amazonsclientbuilder.standard().build()
。但是如果你的客户需要改变地区呢?他们应该能够配置客户端。