[英]Java: how to pass and use this array in another class
I've got a CSV reader class and I've got a user creator class. 我有一个CSV阅读器类,还有一个用户创建者类。 I want the user creator class to take the array, generated by the CSV reader and assign the data to some variables, but Im getting a nullpointerexception 我希望用户创建者类采用由CSV阅读器生成的数组,并将数据分配给某些变量,但是我得到了nullpointerexception
Here is the CSV reader class: 这是CSV阅读器类:
public class CSVData {
private static final String FILE_PATH="C:\\250.csv";
@Test
public static void main() throws Exception {
CSVReader reader = new CSVReader(new FileReader(FILE_PATH));
ArrayList<ArrayList<String>> array = new ArrayList<ArrayList<String>>();
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
ArrayList<String> list = new ArrayList<String>();
for (int i=0;i<5;i++) { //5 is the number of sheets
list.add(nextLine[i]);
}
array.add(list);
}
/*for(int x=0;x<array.size();x++) {
for(int y=0;y<array.get(x).size();y++) {
}
}*/
AppTest3 instance = new AppTest3();
instance.settingVariables(array);
reader.close();
}
}
And here is the user creator class 这是用户创建者类
public class AppTest3 extends AppData (which extends CSVData) {
private String[] firstname;
private String[] lastname;
public void settingVariables(ArrayList<ArrayList<String>> array) {
int randomUser1 = randomizer (1, 250);
int randomUser2 = randomizer (1, 250);
String firstname1 = array.get(randomUser1).get(0);
String firstname2 = array.get(randomUser2).get(0);
String lastname1 = array.get(randomUser1).get(1);
String lastname2 = array.get(randomUser2).get(1) ;
//firstname = { firstname1, firstname2 }; //this doesnt work, dunno why
//lastname = { lastname1, lastname2 };
firstname[0] = firstname1.replace(" ", "");
firstname[1] = firstname2.replace(" ", "");
lastname[0] = lastname1.replace(" ", "");
lastname[1] = lastname2.replace(" ", "");
}
@Parameters({ "driver", "wait" })
@Test(dataProvider = "dataProvider")
public void oneUserTwoUser(WebDriver driver, WebDriverWait wait)
throws Exception {
// A user signs up, then signs out, then a second user signs up
for (int y = 0; y < 2; y++) {
String email = firstname[y].toLowerCase() + randomNumber + "@"
+ lastname[y].toLowerCase() + emailSuffix;
//test here
}
}
This is the error message 这是错误消息
FAILED: oneUserTwoUser(org.openqa.selenium.support.events.EventFiringWebDriver@5efed246, org.openqa.selenium.support.ui.WebDriverWait@2b9f2263)
java.lang.NullPointerException
at com.pragmaticqa.tests.AppTest3.oneUserTwoUser(AppTest3.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
PS: System.out.println(firstname[0]); PS:System.out.println(firstname [0]); doesnt display anything in the console. 在控制台中不显示任何内容。 System.out.println(array); System.out.println(array); displays the list of arrays. 显示数组列表。
EDIT: I found out what the problem was: first of all I changed the way I initialize string[] to this 编辑:我发现了问题所在:首先,我更改了将string []初始化的方式
String[] firstname = new String[2];
String[] lastname = new String[2];
Now firstname[0] returns a value. 现在,firstname [0]返回一个值。
However, when I try to system.out.println firstname[0] in the next method that actually contains the test case, it returns null. 但是,当我尝试在实际包含测试用例的下一个方法中使用system.out.println firstname [0]时,它将返回null。
So I have to find a way to pass those strings to that method. 因此,我必须找到一种将这些字符串传递给该方法的方法。
In you main
method instance
is just a local variable that is lost after method execution ends.: 在您的main
方法instance
中,只是一个局部变量,该局部变量在方法执行结束后会丢失:
AppTest3 instance = new AppTest3(); // just local variable that is lost after method execution ends.
instance.settingVariables(array);
Thus, oneUserTwoUser
is invoked on another instance that has no parameters set. 因此,在没有设置参数的另一个实例上调用oneUserTwoUser
。 You can see this with debugger. 您可以使用调试器看到这一点。
You can put initialization to method before
as below into Apptest3 class: 你可以把初始化方法before
,如下为Apptest3类:
public class AppTest3 {
AppTest3 instance; // field used by tests
@BeforeSuite(alwaysRun = true)
public void before() throws Exception {
CSVReader reader = new CSVReader(new FileReader(FILE_PATH));
ArrayList<ArrayList<String>> array = new ArrayList<ArrayList<String>>();
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
ArrayList<String> list = new ArrayList<String>();
for (int i=0;i<5;i++) { //5 is the number of sheets
list.add(nextLine[i]);
}
array.add(list);
}
instance = new AppTest3(); /// init your instance here
instance.settingVariables(array);
reader.close();
}
}
I've found a solution to this problem by heavily refactoring the code. 我已经通过大量重构代码找到了解决该问题的方法。 Its all explained here 这一切都在这里解释
Java: how can I put two String[] objects into one object and pass them to the next method? Java:如何将两个String []对象放入一个对象并将它们传递给下一个方法?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.