Testing 如何将sshs写入另一台机器的方法的单元测试?

Testing 如何将sshs写入另一台机器的方法的单元测试?,testing,junit,Testing,Junit,我想为一段代码编写单元测试,该代码实际上通过ssh连接到另一台机器并运行命令。我不知道如何着手解决这个问题 代码基本上在远程机器上运行一些命令(copy,grep,awk)。如何在不访问远程计算机的情况下编写测试。如何模拟远程计算机环境 注意事项: -假设单元测试运行的机器无法访问ssh命令需要运行的远程服务器。我不会实际测试建立连接、运行任务和测试结果的整个过程(验收测试) 我建议将其分为两部分: 您希望建立连接的前半部分以及希望运行的命令。这里您将测试用于建立连接的方法是否具有您期望的正确输

我想为一段代码编写单元测试,该代码实际上通过ssh连接到另一台机器并运行命令。我不知道如何着手解决这个问题

代码基本上在远程机器上运行一些命令(
copy
grep
awk
)。如何在不访问远程计算机的情况下编写测试。如何模拟远程计算机环境

注意事项:

-假设单元测试运行的机器无法访问ssh命令需要运行的远程服务器。

我不会实际测试建立连接、运行任务和测试结果的整个过程(验收测试)

我建议将其分为两部分:

  • 您希望建立连接的前半部分以及希望运行的命令。这里您将测试用于建立连接的方法是否具有您期望的正确输出。比如说,测试调用
    connect
    生成正确的shell命令字符串

  • 第二部分是模拟运行
    grep
    (例如)时的响应。
    在这里,您可以将希望其他机器返回给您的代码交给您,并确保您的代码符合您对该特定响应的期望。另一个例子是,当你得到2017-1-17导弹发射的响应时,你测试你的代码是否保存了日期和状态(显然我不知道你的应用程序是什么,这只是一个例子)


  • 这就是我要做的,但我相信其他人会给你很好的例子,告诉你如何在一个巨大的测试中测试整个堆栈。我认为我的方法更加稳定和模块化,使将来添加更多测试更加容易。

    您至少有以下选项:

  • 将方法拆分为几个不同的方法(连接和执行),并在本地测试“执行”部分

  • 在运行命令之前,让您的测试启动准备好的docker容器,并用url参数化您的命令。测试后,应停止/删除docker容器


  • Connect,运行命令一切都是方法的一部分(例如,public void runCmd();)在这种情况下,我该怎么做?所有其他方法都是私有的。听起来你需要分离你的关注点。如果你所做的一切(连接,运行脚本,解析响应等)生活在一个类中,你应该考虑把你的类分成几个类,每个类都有一个责任。那么,您应该能够测试您的各个部分/动作。