mav*_*ckm 3 unix rest jersey junit4 grizzly
我们已经创建了一个测试套件,为了运行它,我们使用嵌入式Grizzly Web Server和JerseyTest框架.
我们正在从JerseyTest扩展一个自定义类,并在其构造函数中创建ApplicationDescriptor,然后调用超类setupTestEnvironment(),它实质上启动了嵌入式的grizzly Web服务器.
我们的测试用例很少扩展此自定义类以直接启动grizzly服务器.但是,我们不会在代码中的任何位置停止此嵌入式服务器.
测试用例在Windows上运行良好,但在Unix上,它们失败,java.net.BindException端口9998正由另一个进程使用.
很明显,如果我们不在代码中停止嵌入式Web服务器,这些测试也会在Windows上出现类似错误.它们如何在Windows上正常运行并且在unix上失败.这与Unix如何产生线程或进程有关吗?
PS我们还测试了使用netstat -a |的其他进程是否正在使用端口9998 grep 9998但没有找到使用该端口的其他进程.
我有一个类似的问题,我确实通过不使用默认端口修复它,如果已经使用过.只需将以下代码添加到您的测试用例中:
@Override
protected int getPort(int defaultPort) {
ServerSocket server = null;
int port = -1;
try {
server = new ServerSocket(defaultPort);
port = server.getLocalPort();
} catch (IOException e) {
// ignore
} finally {
if (server != null) {
try {
server.close();
} catch (IOException e) {
// ignore
}
}
}
if ((port != -1) || (defaultPort == 0)) {
return port;
}
return getPort(0);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1546 次 |
最近记录: |