Session 模拟cassandra会话对象

Session 模拟cassandra会话对象,session,junit,cassandra,mockito,powermockito,Session,Junit,Cassandra,Mockito,Powermockito,我试图模拟cassandra的会话对象,该对象是通过以下方式在实际代码中获得的。。。 session=cluster.connect(键空间) 我想要的是“执行语句并返回模拟会话对象” 我尝试了以下几种选择 MemberModifier.stub(MemberMatcher.method(Cluster.class,“connect”String.class)).toReturn(会话) PowerMockito.when(cluster.connect(keyspace)).thenRetur

我试图模拟cassandra的会话对象,该对象是通过以下方式在实际代码中获得的。。。
session=cluster.connect(键空间)

我想要的是“执行语句并返回模拟会话对象”

我尝试了以下几种选择

  • MemberModifier.stub(MemberMatcher.method(Cluster.class,“connect”String.class)).toReturn(会话)
  • PowerMockito.when(cluster.connect(keyspace)).thenReturn(session)
  • PowerMockito.when(cluster.connect(keyspace)).thenAnswer(new Answer(){public Object Answer(invocationMock调用){return session;}})
  • PowerMockito.when(cluster.connect(keyspace)).thenReturn(session)
  • sessiontestsession=cassandraService.getCassandraDBConnection()
  • 所有这些单独或组合似乎都不起作用。 当执行相关JUnit时,我得到的错误是 下面是堆栈跟踪

    All host(s) tried for query failed (tried: /<<ip address>>:<<port no>> (com.datastax.driver.core.exceptions.TransportException: [/ip address] Cannot connect))
    at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:231)
    at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:77)
    at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1414)
    at com.datastax.driver.core.Cluster.init(Cluster.java:162)
    at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:333)
    at com.datastax.driver.core.Cluster.connect(Cluster.java:283)
    at com.capitalone.payments.customerprofile.service.CassandraInteractionService.getCassandraDBConnection(CassandraInteractionService.java:202)
    
    尝试查询的所有主机均失败(尝试:/:(com.datastax.driver.core.exceptions.TransportException:[/ip地址]无法连接))
    位于com.datastax.driver.core.ControlConnection.ReconnectionInternal(ControlConnection.java:231)
    位于com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:77)
    位于com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1414)
    位于com.datastax.driver.core.Cluster.init(Cluster.java:162)
    在com.datastax.driver.core.Cluster.connectAsync(Cluster.java:333)上
    位于com.datastax.driver.core.Cluster.connect(Cluster.java:283)
    在com.capitanlone.payments.customerprofile.service.CassandraInteractionService.getCassandraDBConnection(CassandraInteractionService.java:202)
    
    有人能带我到这里吗

    (我在堆栈跟踪中屏蔽了ip地址和端口号)

    谢谢!
    -Sriram

    我想您应该模拟Java驱动程序会话对象进行测试,对吗

    在这种情况下,我建议:

  • 使用嵌入式Cassandra服务器进行单元测试,请参阅或

  • 使用模拟CQL请求和响应的。这可能是最接近你想要的,而不是嘲笑


  • 谢谢你的信息,多恩杜伊海。。。。那么,我们是否无法使用PowerMock或Mockito框架进行模拟?不管怎样,让我也试试你说的。再次感谢<代码>集群
    对象具有受保护的构造函数,因此很难对其进行模拟。一般来说,如果您需要依赖Powermock和存根,我建议您直接使用存根Cassandra