编辑:如果帖子被认为过于混乱,我很抱歉,我会编辑它并只留下有关我的问题的部分...
我写了一个名为" ArithmeticNode"的类。它实现了一个包含以下方法的接口:
public void turnOn() {
arithmeticServer.start();
}
public void turnOff(){
arithmeticServer.stop();
}
并且还包含一个私有方法:
private void negotiatePort(NodeManifest nodeManifest, ThriftServer arithmeticServer) {
while(true) {
int proposedPort = arithmeticServer.start();
int returnedPort = managementClient.registerNode(nodeManifest, proposedPort);
if(proposedPOrt != returnedPort) {
arithnemticServer.stop();
}
else
break;
}
}
我尝试做的是编写一个测试,在其中我创建了许多这些算术节点,并使它们注册到我已编写并用作服务器的管理节点。然后我的项目的第二部分将使这些节点进行交互,但这不是实际问题的一部分。 我已经写了一个有效的junit测试:
@Test
public void testArithmeticServer() throws Exception {
List<NodeManifest> nodeManifests = new ArrayList<>();
nodeManifests.add(new NodeManifest("localhost", Arrays.asList(new String[]{"addition"})));
nodeManifests.add(new NodeManifest("localhost", Arrays.asList(new String[]{"subtraction","multiplication"})));
nodeManifests.add(new NodeManifest("localhost", Arrays.asList(new String[]{"addition","multiplication","division"})));
nodeManifests.add(new NodeManifest("localhost", Arrays.asList(new String[]{"addition","division"})));
List<ThriftServer> arithmeticServers = new ArrayList<>();
for (NodeManifest nodeManifest : nodeManifests) {
ThriftServer arithmeticServer = new ThriftServer(ArithmeticServiceHandler.class);
arithmeticServers.add(arithmeticServer);
negotiatePort(nodeManifest,arithmeticServer);
}
private void negotiatePort() {
while(true) {
int proposedPort = arithmeticServer.start();
int returnedPort = managementClient.registerNode(nodeManifest, proposedPort);
if(proposedPOrt != returnedPort) {
arithnemticServer.stop();
}
else
break;
}
}
我需要编写一个测试,我不必将negotiatePort方法直接放在测试代码中,但是我为每个节点调用了我在arithmeticNode类中的private negotiatePort方法;我不确定是否可以这样做以及如何做到这一点。我希望我比以前版本的帖子更容易混淆: - )
答案 0 :(得分:1)
您可以将negotiatePort方法包设为本地。然后你就可以在你的测试中调用它(它应该存在于同一个包中)。包装外的任何人都无法使用它