當我試圖單元測試處理JSF組件的Java類(javax.faces.model.SelectItem)時,出現一個奇怪的錯誤。我得到的錯誤是這樣的:單元測試錯誤(JSF):非本地或抽象方法中的缺少代碼屬性
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/faces/model/SelectItem
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
...
然後,它達到我的代碼(在ItemOptionsHandler.java):
的SelectItem []項目=新的SelectItem [itemList.size()];
這是什麼錯誤?
感謝您的幫助!
這是我想測試類:
package foo.web.converters;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.model.SelectItem;
import foo.business.facade.ItemFacade;
import foo.model.MyType;
public class ItemOptionsHandler implements Serializable {
@EJB
private ItemFacade facade;
public void setFacade(ItemFacade facade) {
this.facade = facade;
}
public SelectItem[] getSupplierItems() {
List<MyType> itemList = facade.getSupplierItems();
SelectItem[] items = new SelectItem[itemList.size()];
int i = 0;
// more stuff
return items;
}
}
這是測試:
package foo.web.converters;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import foo.facade.ItemFacade;
import foo.model.MyModel;
public class ItemOptionsHandlerTest {
private ItemOptionsHandler instance = null;
public ItemOptionsHandlerTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
instance = new ItemOptionsHandler();
instance.setFacade(new BusinessFacadeTemp());
}
@After
public void tearDown() {
}
@Test
public void testGetSupplierItems() {
System.out.println("getSupplierGroups");
SelectItem[] expResult = null;
SelectItem[] result = instance.getSupplierItems();
assertEquals(expResult, result);
}
private class BusinessFacadeTemp implements ItemFacade {
@Override
public List<MyTest> getSupplierItems() {
return null;
}
}
}
下面是一些依賴關係:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>1.2-b19</version>
</dependency>
是的我使用組織內中央檔案庫中的Maven。我在上面添加了一些我的依賴關係。 – Jojje 2010-10-01 07:44:04
你推薦做什麼? – Jojje 2010-10-01 07:45:15
我認爲你應該下載缺少的jar並使用它,而不是從maven倉庫。 – amorfis 2010-10-01 08:05:03