2012-08-29 47 views
0

我想基於工資使用junit測試用例對僱員對象進行排序。顯示空指針異常與junit測試用例

這是我的員工排序類

package day4; 
import day4.Employee; 
public class EmployeesInfoWithSalary { 
    private Employee[] employee; 
    private int numberOfEmployees; 
public EmployeesInfoWithSalary(Employee[] employee, int numberOfEmployees) { 
    super(); 
    this.employee = employee; 
    this.numberOfEmployees = numberOfEmployees; 
} 

public Employee[] getSortBasedOnSalary() { 

    String temp; 
    for (int iterator = 0; iterator < numberOfEmployees; iterator++) { 
     int minSalary = employee[iterator].getSalary(); 
     int index = iterator; 
     for (int comparator = iterator; comparator < numberOfEmployees; comparator++) { 
      if (employee[comparator].getSalary() < minSalary) { 
       index = comparator; 
       minSalary = employee[comparator].getSalary(); 
      } 

     } 

     employee[index].setSalary(employee[iterator].getSalary()); 
     employee[iterator].setSalary(minSalary); 
     temp = employee[index].getId(); 
     employee[index].setId(employee[iterator].getId()); 
     employee[iterator].setId(temp); 
     temp = employee[index].getName(); 
     employee[index].setName(employee[iterator].getName()); 
     employee[iterator].setName(temp); 

    } 

    return employee; 

} 

} 

員工對象類是如下

package day4; 

public class Employee { 

private String id; 
private String name; 
private int salary; 

public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int getSalary() { 
    return salary; 
} 

public void setSalary(int salary) { 
    this.salary = salary; 
} 

} 

的JUnit測試用例testemployee工資等級如下表所示

package day4; 

import static org.junit.Assert.*; 
import day4.Employee; 

import org.junit.Test; 

public class TestEmployeeInfoWithSalary { 

@Test 
public void testGetSortBasedOnSalary() { 

Employee[] employee = new Employee[5]; 

employee[0].setName("pratap"); 
employee[1].setName("aruna"); 
employee[2].setName("satyam"); 
employee[3].setName("krishna"); 
employee[4].setName("siva"); 

employee[0].setId("k0100"); 
employee[1].setId("k0101"); 
employee[2].setId("k0102"); 
employee[3].setId("k0103"); 
employee[4].setId("k0104"); 
employee[0].setSalary(10000); 
employee[1].setSalary(1000); 
employee[2].setSalary(8000); 
employee[3].setSalary(6000); 
employee[4].setSalary(9000); 
EmployeesInfoWithSalary employeeInfoWithSalary= new EmployeesInfoWithSalary(employee, 5); 

employee[4].setName("pratap"); 
employee[0].setName("aruna"); 
employee[2].setName("satyam"); 
employee[1].setName("krishna"); 
employee[3].setName("siva"); 

employee[4].setId("k0100"); 
employee[0].setId("k0101"); 
employee[2].setId("k0102"); 
employee[1].setId("k0103"); 
employee[3].setId("k0104"); 
employee[4].setSalary(10000); 
employee[0].setSalary(1000); 
employee[2].setSalary(8000); 
employee[1].setSalary(6000); 
employee[3].setSalary(9000); 
assertArrayEquals(employee,employeeInfoWithSalary.getSortBasedOnSalary()); 

} 

} 

的日誌顯示零點表達的錯誤..

可以任何機構幫我.. 謝謝..

+1

您能否提供一個堆棧跟蹤? – Sal

+2

我建議您閱讀NullPointerException來查看它發生的位置,並使用您的調試器嘗試調試代碼以確定發生這種情況的原因。 –

+0

添加實際日誌plz – rooftop

回答

7

我懷疑這是NPE的路線。

// creates an array full of null values. 
Employee[] employee = new Employee[5]; 

employee[0].setName("pratap"); 

您需要將Employee對象添加到數組中的每個元素。

更好的方法是使用一個構造函數,該構造函數接受所有需要的字段。

Employee[] employee = { 
    new Employee("pratap", "k0100", 10000), 
    new Employee("aruna", "k0101", 1000), 
    new Employee("satyam", "k0102", 8000), 
    new Employee("krishna","k0103", 6000), 
    new Employee("siva", "k0104", 9000) }; 
+0

我通過這樣做得到答案......員工firstEmployee = new Employee(); \t firstEmployee.setName(「pratap」); \t firstEmployee.setSalary(10000); \t firstEmployee.setId(「k0100」); \t員工[0] = firstEmployee; \t firstEmployee.setSalary(1000); \t firstEmployee.setId(「k0101」); \t firstEmployee.setName(「aruna」); \t employee [1] = firstEmployee; – user533

+0

我不知道原因.. – user533

+0

嘗試在各個點上打印'System.out.println(Arrays.toString(employee));'在調試器中逐個執行代碼。這將讓你看到發生了什麼。 –

0

Employee[] employee = new Employee[5]; 

在陣列中的每個指標需要初始化Employee對象。

employee[0] = new Employee(); etc