作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 JCraft 的 JSch 库作为我的程序的 FTP 客户端,它工作正常。但我在创建用于单元测试的模拟(MockFtpServer)时遇到了困难。
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockftpserver.fake.FakeFtpServer;
import org.mockftpserver.fake.UserAccount;
import org.mockftpserver.fake.filesystem.FileEntry;
import org.mockftpserver.fake.filesystem.FileSystem;
import org.mockftpserver.fake.filesystem.UnixFakeFileSystem;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Properties;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SFTPManagerTest {
static FakeFtpServer fakeFtpServer;
@BeforeClass
public static void startFTP() throws Exception {
fakeFtpServer = new FakeFtpServer();
fakeFtpServer.setServerControlPort(9999);
FileSystem fileSystem = new UnixFakeFileSystem();
fileSystem.add(new FileEntry("/data/JFS_HCID_APPLICATION_STATUS_20190109.TXT", "<schema/>"));
fakeFtpServer.setFileSystem(fileSystem);
UserAccount userAccount = new UserAccount("user", "password", "/");
fakeFtpServer.addUserAccount(userAccount);
fakeFtpServer.start();
}
@Test
public void getFileListing() {
try {
JSch jsch = new JSch();
Session jschSession = jsch.getSession("user", "localhost", 9999);
jschSession.setPassword("password");
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
jschSession.setConfig(config);
jschSession.connect();
Channel jschChannel = jschSession.openChannel("ftp");
jschChannel.connect();
ChannelSftp channel = (ChannelSftp) jschChannel;
Vector v = channel.ls("/data");
Assert.assertNotNull(v);
} catch (Exception ex) {
ex.printStackTrace();
}
}
@AfterClass
public static void stopFTP() {
fakeFtpServer.stop();
}
}
依赖关系:
输出:在执行测试方法期间它总是卡住/停止,而不是完成。当卡住/停止时,我可以使用 WinSCP 或 FTP CLI 访问 MockFtpServer。从日志来看,来自 JSch 的命令似乎无法识别。
2019-02-18 17:54:15,996 INFO [Thread-0] org.mockftpserver.core.server.AbstractFtpServer: Connection accepted from host /127.0.0.1
2019-02-18 17:54:16,002 INFO [Thread-6] org.mockftpserver.core.command.AbstractTrackingCommandHandler: Sending reply [220 Service ready for new user. (MockFtpServer 2.7.1; see http://mockftpserver.sourceforge.net)]
2019-02-18 17:54:16,004 INFO [Thread-6] org.mockftpserver.core.session.DefaultSession: Received command: [SSH-2.0-JSCH-0.1.54]
2019-02-18 17:54:16,004 WARN [Thread-6] org.mockftpserver.core.command.UnsupportedCommandHandler: No CommandHandler is defined for command [SSH-2.0-JSCH-0.1.54]
2019-02-18 17:54:16,005 INFO [Thread-6] org.mockftpserver.core.command.AbstractTrackingCommandHandler: Sending reply [502 Command not implemented: SSH-2.0-JSCH-0.1.54.]
我哪里出错了?
最佳答案
JSch 是一个 SSH/SFTP 库。您不能使用 FTP 服务器来测试它。您需要使用SFTP服务器。 FTP和SFTP是两个完全不相关且不同的协议(protocol)。
关于java - Java 中的 FTP 单元测试(JSch 和 MockFtpServer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54746688/
我有一些连接到 FTP 服务器的代码,我正在尝试为该代码编写测试用例。为此,我一直在尝试使用 MockFtpServer 来模拟 FTP 服务器,以便测试我的交互。 http://mockftpser
我的 JUnit 测试跟踪失败。错误是java.lang.NullPointerException,它发生在这些代码行中: @AfterClass public static void aft
我正在使用 JCraft 的 JSch 库作为我的程序的 FTP 客户端,它工作正常。但我在创建用于单元测试的模拟(MockFtpServer)时遇到了困难。 import com.jcraft.js
我是一名优秀的程序员,十分优秀!