Iseries上的Java IFSFile在PC上测试

Iseries上的Java IFSFile在PC上测试,java,testing,ibm-midrange,Java,Testing,Ibm Midrange,我正在尝试开发一个Java类,该类将用于iSeries上的RPG程序。此类将使用IFSFile管理文件。问题是我不知道如何在我的电脑上测试这个(如果可能的话) 我的代码类似于: import java.io.BufferedReader; import java.io.IOException; import com.ibm.as400.access.AS400; import com.ibm.as400.access.AS400SecurityException; import com.ibm

我正在尝试开发一个Java类,该类将用于iSeries上的RPG程序。此类将使用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>
导入java.io.BufferedReader;
导入java.io.IOException;
导入com.ibm.as400.access.as400;
导入com.ibm.as400.access.AS400SecurityException;
导入com.ibm.as400.access.IFSFile;
导入com.ibm.as400.access.IFSFileReader;
(...)
AS400系统=新AS400(“AS400SystemName”);
IFSFile file=新的IFSFile(系统,“/File1”);
BufferedReader reader=null;
试一试{
reader=newbufferedreader(newifsfilereader(文件));
}捕获(AS400SecurityException e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
//读取文件的一行
字符串line1=null;
试一试{
line1=reader.readLine();
}捕获(IOE异常){
e、 printStackTrace();
}
//打印行
系统输出打印项次(第1行);
//近距离阅读
试一试{
reader.close();
}捕获(IOE异常){
e、 printStackTrace();
}
我不太了解iSeries,我有一些疑问:

  • 如果我试图在我的PC上运行此代码,它会询问我一个用户/密码,当该类将在iSeries上使用时,它也会询问,或者它会询问正在运行应用程序的用户

  • 是否有任何方法可以在我的电脑上测试此部件,以了解其是否可以在生产中使用?我的想法是首先使用mock进行单元测试,但后来我想进行一些不使用mock的功能测试,可能是某种模拟器或类似的


  • 提前感谢。

    我建议您将AS400对象的主机名、用户id和密码参数定义为字段(或常量),并根据其运行方式进行分配

    当你调试的时候

    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";
    
    您可能还希望使用将AS400对象上的GUI available属性设置为false。这样,如果传递了错误的用户id或密码,将引发异常,而不是弹出GUI登录窗口

    一般来说,在PC上运行的功能在主机上也同样有效。

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

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


    非常感谢,大卫。但是,我无法从我用来开发的机器上访问AS400。所以我不知道是否有一些方法来测试它。这将允许您对基于IFS的对象使用文件操作。您可以使用普通文件进行测试。就我个人而言,在您在真正的IBMi上进行测试之前,我不建议将类似的内容转移到生产中。我的想法是使用IFSJavaFile,问题是如何在没有iSeries的情况下进行测试。无论如何,您发送的示例对我很有帮助,因为它不仅仅是一个模拟,但是如果有人有更好的方法来测试它(没有iSeries),那将不胜感激。非常感谢,可以肯定的是一个模拟器会很棒:)JT400Native.jar不特别允许在运行java代码时使用当前用户的凭据。它只提供纯java JT400.jar中没有的本机优化。使用JT400.jar时,只需创建一个无参数
    AS400
    对象,即可使用当前用户凭据。或者,您可以使用
    newAS400(“localhost”、“当前”、“当前”)来构造AS400对象
    使用当前用户信息。就我个人而言,我总是使用纯java JT400来避免它与JT400Native.jar之间的任何差异。