java - Guice模块测试: require binding of annotated strings

标签 java unit-testing kotlin guice

我正在尝试为我在多个项目中使用的库存储库中的常见 guice 模块编写一些测试。某些模块具有注入(inject)项目配置的注释字符串注入(inject)。例如,我有一个 cassandra 模块,需要主机、端口和其他配置的字符串绑定(bind):

class CassandraModule : AbstractModule() {
companion object {
    const val CASSANDRA_HOST = "cassandra.host"
    const val CASSANDRA_PORT = "cassandra.port"
    ...

    const val MY_CASSANDRA_READ = "casandra.db.read"
    const val MY_CASSANDRA_WRITE = "casandra.db.write"
}

override fun configure() {
}

@Provides
@Singleton
@Named(MY_CASSANDRA_READ)
fun provideCassandraReadCluster(
    @Named(CASSANDRA_HOST) host: String,
    @Named(CASSANDRA_PORT) port: Int,
    @Named(CASSANDRA_DATACENTER) dc: String
): Cluster {
    val queryOptions = QueryOptions()
    queryOptions.consistencyLevel = ConsistencyLevel.LOCAL_ONE

    val cluster = Cluster.builder()
        .addContactPoint(host)
        .withPort(port)
        .withLoadBalancingPolicy(DCAwareRoundRobinPolicy(dc))
        .withQueryOptions(queryOptions)
        .build()
    return cluster
}

@Provides
@Singleton
@Named(MY_CASSANDRA_READ)
fun provideCassandraReadSession(
    @Named(MY_CASSANDRA_READ) cluster: Cluster,
    @Named(CASSANDRA_KEYSPACE) keyspace: String
): Session {
    return cluster.connect(keyspace)
}
...
}

所有这些配置字符串绑定(bind)应通过使用此库模块作为依赖项的 Property 绑定(bind)来自其他项目。如何模拟这些带注释的字符串属性?

最佳答案

你为什么要 mock 他们?您可以在测试中注册一个提供这些值的附加模块。

关于java - Guice模块测试: require binding of annotated strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50590495/

相关文章:

java - 如何找到给定整数数组中最长的奇数和子数组? (以最有效的方式)

java - :Noob Alert: How can users in the same database add each other to their 'contact lists' ?

c# - 如何最小化 Entity Framework SaveChangesAsync?

Android Jetpack Compose - 图像无法缩放到框的宽度和高度

java - 可变高度 ListView

java - 客房预订计划

c++ - C++ FakeIt 库多重继承

结果相等时 Python 单元测试失败

reduce - 如何在空的 Kotlin 数组上调用 reduce?

android - 不推荐使用 SimpleExoPlayer.Builder(this).build()