2012-06-17 2 views
-1

나는 다음과 같은 오류 얻을 JUnit 테스트를 실행하려고 할 때 - 문제를 일으키는JUnit 테스트 오류 - ClassCastException이

java.lang.ClassCastException: business.Factory cannot be cast to services.itemservice.IItemsService 
at business.ItemManager.get(ItemManager.java:56) 
at business.ItemMgrTest.testGet(ItemMgrTest.java:49) 

특정 테스트를

@Test 
public void testGet() { 
     Assert.assertTrue(itemmgr.get(items)); 
} 

는 테스트입니다 코드입니다 ...

public boolean get(Items item) { 

     boolean gotItems = false;  

     Factory factory = Factory.getInstance(); 

     @SuppressWarnings("static-access") 
     IItemsService getItem = (IItemsService)factory.getInstance(); 

     try { 
      getItem.getItems("pens", 15, "red", "gel"); 
      gotItems = true; 
     } catch (ItemNotFoundException e) { 
      // catch 
      e.printStackTrace(); 
      System.out.println("Error - Item Not Found"); 
     } 
     return gotItems; 
    } 

항목을 저장하는 테스트는 거의 동일합니다.

공장 클래스입니다 ..

public class Factory { 

    private Factory() {} 
    private static Factory Factory = new Factory(); 
    public static Factory getInstance() {return Factory;} 




    public static IService getService(String serviceName) throws ServiceLoadException { 
     try { 
      Class<?> c = Class.forName(getImplName(serviceName)); 
      return (IService)c.newInstance(); 
     } catch (Exception e) { 
      throw new ServiceLoadException(serviceName + "not loaded"); 
     } 
    } 



    private static String getImplName (String serviceName) throws Exception { 
     java.util.Properties props = new java.util.Properties(); 
      java.io.FileInputStream fis = new java.io.FileInputStream("config\\application.properties"); 
       props.load(fis); 
        fis.close(); 
        return props.getProperty(serviceName); 
} 
} 
+0

'Factory.getInstance()'와 같은 메소드는 무엇입니까? 그것은'Factory' 객체를 리턴하지만'IItemsService'를 리턴합니다. – plucury

답변

0

귀하의 Factory.getInstance 방법은 공장 개체를 반환하고, 공장 IItemsService 없습니다. 어쩌면 당신은 다음과 같은 변경해야

@SuppressWarnings("static-access") 
IItemsService getItem = (IItemsService)factory.getInstance(); 

에 : 당신은 잘못된 방법이라고했다

@SuppressWarnings("static-access") 
IItemsService getItem = (IItemsService)factory.getService(serviceName); 
0

. 메서드 Factory.getInstance()은 인스턴스 (구현에 따라 싱글 톤)를 반환하므로 FactoryIItemService으로 캐스팅 할 때 ClassCastException을 던집니다.

FactoryIItemService을 반환하는 방법이 없습니다. 유일한 방법은 getServiceIService을 반환한다는 것입니다. 그러나 IServiceIItemService으로 캐스팅하려고 시도하면 IItemService가 IService를 확장하지 않으므로 ClassCastException이 표시 될 수 있습니다.