首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试远程接口的所有方法是否抛出RemoteException

测试远程接口的所有方法是否抛出RemoteException
EN

Stack Overflow用户
提问于 2016-12-11 15:43:21
回答 1查看 1.4K关注 0票数 0

在使用RMI (远程方法调用)时,扩展Remote的接口中定义的所有方法都需要在其throws子句中包含RemoteException

例如,请参见来自本RMI教程的以下本RMI教程接口。

代码语言:javascript
复制
public interface Compute extends Remote {
    <T> T executeTask(Task<T> t) throws RemoteException;
}

问题是编译器不检查方法是否定义正确,而是当程序在Remote接口中遇到不抛出RemoteException的方法时,在执行过程中抛出异常。

如果在程序实际运行之前就发现了这样的问题,情况会好得多。如何才能为这种情况编写测试?

编辑:我添加了一个示例代码来演示这个问题。

pom.xml

代码语言:javascript
复制
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>test</groupId>
  <artifactId>test</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>rmic-maven-plugin</artifactId>
      <version>1.2.1</version>
    </dependency>
  </dependencies>
</project>

src/main/java/test/RemoteExample.java

代码语言:javascript
复制
package test;
import java.rmi.Remote;
public interface RemoteExample extends Remote {
  // the method does not throw RemoteException
  void action();
}

src/test/java/test/RemoteExampleTest.java

代码语言:javascript
复制
package test;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import org.junit.Test;

public class RemoteExampleTest {
  @Test
  public void test1() throws RemoteException {
    RemoteExample example = new RemoteExample() {
      public void action() {
        // do nothing
      }
    };
    // this fails
    RemoteExample exported = (RemoteExample) UnicastRemoteObject.exportObject(example, 0);
  }
}

mvn test失败,因为RemoteExample.action()方法是在Remote接口中声明的,但不会抛出RemoteException,因此无法导出。但是,如果在测试之前添加@Ignore,maven构建就会成功结束,这意味着条件没有经过测试。

我看到了一个编写自定义测试的解决方案,该测试将查看每个Remote接口,并检查每个方法是否使用反射抛出RemoteException。但我相信还有更好的方法。

EN

回答 1

Stack Overflow用户

发布于 2016-12-11 23:13:01

rmic会检查它。您可以将rmic集成到构建中。如果要使用动态存根,请确保在以后删除_stub.class文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41087936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档