我使用在 Windows 7 中运行的 Java 7、JUnit 4.10.0、Mockito 1.9.5 和 Eclipse Juno 作为我的 IDE。我正在为我的 Java 类使用 Java EE 注释。我创建了一个休息服务,当我的一个 JUnit 单元测试调用 bean 的一个方法时遇到了问题。
在我的网络服务中执行createOptFile方法时,文件 ft070r_999.opt 的 FileOutputStream 已成功创建。当我的单元测试调用此方法时,我返回java.io.FileNotFoundException: \appworx\twcis\wcisout\ft070r_999.opt (The system cannot find the path specified)。
在这种情况下,我将传入一个 HashMap,其中包含 该方法挖掘并使用的/appworx/twcis/wcisout/ft070r_999.opt的完全限定 UNIX 类型路径。FileOutputStream 从 UNIX 样式路径转换为 Windows 样式。从服务调用和从 JUnit 调用时,转换后的路径都是相同的。我故意使用不存在的路径\blah\appworx\twcis\wcisout\ft070r_999.opt 破坏了网络服务,只是为了获得相同的异常和输出以确认服务和服务的路径转换相同单元测试 - 只需将“/”切换为“\”。
这是我的bean方法:
@Stateless
public class HPExstreamBean {
public String createOptFile(HashMap<String, ArrayList<HashMap<String, String>>> returnHash, String report) throws IOException {
String optFile = null;
optFile = returnHash.get("files").get(0).get("content").split("[.]", 2)[0] + ".opt";
OutputStream out = new FileOutputStream(new File(optFile));
//
//more code in here that is never reached because of Exception
//
return optFile;
}
}
这是我的单元测试:
@Test
public void testCreateOptFileNotNull() {
HPExstreamBean hpExstreamBean= new HPExstreamBean();
String result = null;
try {
result = hpExstreamBean.createOptFile(returnHashTest, "test_report");
} catch (IOException e) {
e.printStackTrace();
}
assertNotNull(result);
}
这是单元测试中止时返回的堆栈跟踪的顶部:
java.io.FileNotFoundException: \appworx\twcis\wcisout\ft070r_999.opt (The system cannot find the path specified)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
at java.io.FileOutputStream.<init>(FileOutputStream.java:165)
at com.pinnacol.solomongrundyservice.business.HPExstreamBean.createOptFile(HPExstreamBean.java:307)
at test.unit.HPExstreamBeanTest.testCreateOptFileNotNull(HPExstreamBeanTest.java:297)
我看不出 bean 的容器管理会在哪里取得成功,因为这不是任何需要持久化的事务,但我愿意犯错,因为我对 Java 还很陌生。
谁能帮我弄清楚为什么我的单元测试调用 bean 方法失败了?