在Iseries上测试PC上的Java IFSFile

时间:2013-07-01 16:43:00

标签: java testing ibm-midrange

我正在尝试开发一个将用于iSeries上的RPG程序的Java类。此类将使用IFSFile管理文件。问题是我不知道如何在我的电脑上测试这个(如果可能的话)。

我的代码类似于:

import java.io.BufferedReader;
import java.io.IOException;

import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AS400SecurityException;
import com.ibm.as400.access.IFSFile;
import com.ibm.as400.access.IFSFileReader;
(...)

        AS400 system = new AS400("AS400SystemName");
        IFSFile file = new IFSFile(system, "/File1");
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new IFSFileReader(file));
        } catch (AS400SecurityException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Read one line of the file
        String line1 = null;
        try {
            line1 = reader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Print line
        System.out.println(line1);

        // Close reader
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }</pre>

我不太了解iSeries,我有些疑惑:

  1. 如果我尝试在我的电脑上运行此代码,它会要求我输入用户名/密码,当该类将在iSeries上使用时,它也会询问,或者它将采用运行该应用程序的用户

  2. 有什么方法可以在我的电脑上测试这个部分,以便知道它是否适用于制作?我的想法是首先使用模拟进行单元测试,但后来我想进行一些不使用模拟的功能测试,可能是某种模拟器或者类似的...

  3. 提前致谢。

2 个答案:

答案 0 :(得分:2)

我建议您定义主机名,用户ID和&amp; AS400对象的密码参数作为字段(或常量),并根据它们的运行方式进行分配。

进行调试时

String host = "AS400SystemName";
String user = "youruserid";
String pass = "yourpassword";

AS400 system = new AS400(host, user, pass);

当您在IBM i主机上运行该类时,请定义如下变量:

String host = "localhost";
String user = "*CURRENT";
String pass = "*CURRENT";

您可能还希望使用setGUIAvailable将AS400对象上的GUI可用属性设置为false。这样,如果传递了错误的用户ID或密码,则会抛出异常而不是弹出GUI登录窗口。

通常,在PC上运行的功能在主机上的工作方式相同。

答案 1 :(得分:0)

  • 在回答问题1,用户ID和密码问题时,请确保在iSeries端的类路径中使用JT400Native.jar而不是JT400.jar。使用JT400Native.jar时,在使用com.ibm.as400.access类时,应该使用当前正在运行的作业的用户标识和密码。

  • 在回答问题2时,如果没有iSeries与之交谈,则无法测试您的程序。 (可选)您可以从普通文件输入流中读取或写入普通文件输出流而不是IFSFile。这至少可以让您测试代码的业务逻辑。但是,当测试com.ibm.as400.access类时,如果没有真正的iSeries,就无法做到。一个模拟器会很好,但架构是如此不同,我不知道有谁做过。