Java junit在win32下测试具有shell脚本功能的类

Java junit在win32下测试具有shell脚本功能的类,java,unix,junit,Java,Unix,Junit,我们有一个通过公开接口在类中使用的API。该API适用于UNIX系列,并假设每个UNIX都有/bin/sh。因此,在win32下运行junit测试时,我们得到: 无法运行程序“/bin/sh” 这是第二十二条军规还是有机会解决?除了junit之外,可能还存在一些可以在UNIX下轻松运行的框架。谢谢 更新: 代码是可移植的,可以在多个操作系统(java)上运行。 我想编写一些单元测试(这是我自己的倡议),部分代码作为API向我公开(在另一个部门进行测试)。现在,当我为自己的代码运行测试时,因为它依

我们有一个通过公开接口在类中使用的API。该API适用于UNIX系列,并假设每个UNIX都有/bin/sh。因此,在win32下运行junit测试时,我们得到:

无法运行程序“/bin/sh”

这是第二十二条军规还是有机会解决?除了junit之外,可能还存在一些可以在UNIX下轻松运行的框架。谢谢

更新:

代码是可移植的,可以在多个操作系统(java)上运行。 我想编写一些单元测试(这是我自己的倡议),部分代码作为API向我公开(在另一个部门进行测试)。现在,当我为自己的代码运行测试时,因为它依赖于API代码,所以它会执行一些神奇的操作,比如调用在virgin win32下不存在的shell脚本(我们使用win32+ssh进行开发)

切换到Linux目前不是一个选项。
不过,可以选择通过nx客户端将Eclipse安装到unix+gui上。希望能澄清一点。

你的问题不清楚。显然,如果代码是针对Unix的,那么它将无法在Win32下工作,因此单元测试失败是自然的(也可以)。为什么要在Win32下测试Unix的代码

如果无法在Unix下进行测试(或将代码重写为独立于平台),则以下选项将是:

  • 重构代码,使其不直接访问/bin/Sh;然后,您可以模拟依赖关系以获得真正的单元测试,它将是独立于平台的(请注意,严格来说,依赖于外部资源(如/bin/sh)的测试不是单元测试,而是集成测试)
  • 在Win32上安装某种伪脚本来代替/bin/sh(并可能使路径可配置)
  • 将junit测试列表拆分为依赖于平台的和独立于平台的测试,并仅在Win32下运行在那里工作的测试(其余在Unix上运行)
但您确实应该首先弄清楚如何测试特定于平台的功能

这是第二十二条军规还是有机会解决

如果可以的话,如果你的代码不是为了可移植的(我不会讨论这个),为什么要在Windows上构建它?也许你可以添加一个平台检查,以避免在Windows上运行时调用“Unix”API。或者你可以安装以使
sh
在Windows上也可用

可能存在junit以外的框架,可以在UNIX下轻松运行。谢谢


嗯?也许我不明白,但我的理解是,您的代码有问题,而JUnit没有。如果我错了,请澄清您的期望。

谢谢,操作列表看起来很可靠。要澄清,我没有任何win32平台特定的功能。请参阅更新。感谢cygwin选项。路径中的空脚本OTOH,业务逻辑可能需要运行适当的sh脚本(取决于我对单元测试的深入程度)顺便说一句,我的win32 pc上安装了cygwin,但是我如何通过Eclipse运行我的单元测试?难道我不应该在cygwin shell下运行它们吗?我不能做很多测试,因为我不在windows下,但如果我记得清楚的话,cygwin命令在windows shell(cmd)中可用,不是吗?在eclipse下会遇到什么问题?获取RCFILE时捕获到Pascal Thivent:IO异常:无法运行程序“/bin/sh”:CreateProcess error=3,系统找不到指定的路径dwell,我猜您必须在cygwin shell下运行它们。啊,如果我理解正确,对/bin/sh的调用不在您要进行单元测试的代码中,而是在您的代码调用的某些第三方API中。然后您可以模拟第三方API以避免这些问题。