如何在 junit 测试中调用实现接口的 class 中包含的私有方法?
How can I call a private method contained into a class that implements an interface, in a junit test?
编辑:如果 post 被认为太混乱,我深表歉意,我将对其进行编辑,只留下与我的问题有关的部分...
我写了一个名为 "ArithmeticNode" 的 class,它实现了一个包含以下方法的接口:
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 class 中的私有 negotiatePort 方法;我不确定是否可以这样做以及如何做到。我希望我比之前版本的 post 没有那么混乱 :-)
您可以将negotiatePort 方法包本地化。然后你就可以在你的测试中调用它(它应该位于同一个包中)。包裹外的任何人都无法使用它
编辑:如果 post 被认为太混乱,我深表歉意,我将对其进行编辑,只留下与我的问题有关的部分...
我写了一个名为 "ArithmeticNode" 的 class,它实现了一个包含以下方法的接口:
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 class 中的私有 negotiatePort 方法;我不确定是否可以这样做以及如何做到。我希望我比之前版本的 post 没有那么混乱 :-)
您可以将negotiatePort 方法包本地化。然后你就可以在你的测试中调用它(它应该位于同一个包中)。包裹外的任何人都无法使用它