2014-09-02 70 views
1

我正在用Spring 4創建一個應用程序& Hibernate。 當我在服務器上運行應用程序時,它工作正常。然而,當我運行單元測試,在控制檯顯示以下錯誤:Spring4 + JUnit:未定義[dao.impl.GenericDAOImpl]類型的合格bean:期望的單個匹配bean,但找到33

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [dao.impl.GenericDAOImpl] is defined: expected single matching bean but found 33: genericDAO,userDAO,profileDAO,chartDAO,dashboardDAO, ...

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:beans.xml"}) 

public class UserServiceTest extends BaseTest { 

@Autowired 
private UserService userService; 

@Before 
public void setUp() { 
    System.out.println("Before"); 
    userService = new UserServiceImpl(); 
} 

@Test 
public void testAdd() { 
    User user = new User(); 
    user.setEmail("email"); 
    user.setFirstName("firstName"); 
    user.setLastName("lastName"); 
    user.setPassword("password"); 
    userService.create(user); 
} 

public void setUserService(UserService userService) { 
    this.userService = userService; 
} 


} 

回答

1

對於初學者來說,你不應該建立在集成測試這樣的新UserService。如果你的beans.xml被正確的構造,那麼UserService應該被注入。如果你在@Before方法中創建了一個新對象,那麼你並沒有進行集成測試,因爲它不是由spring管理的,並且沒有任何bean依賴關係會被解析。其次,Spring可以看到33種GenericDAO接口的不同實現。這個UserService是你自己創建的類嗎?如果是這樣,當您在userService中定義userDAO時,應該使用限定符。即

@Autowired 
@Qualifier("userDAO") 
+0

我已經嘗試在服務類中放入'@ Qualifier',但仍然不起作用。但是,它在主應用程序中可以正常工作,無論是否有'@ Qualifier'。據我所知,Spring4不再需要'@ Qualifier'。這是我的服務類: '公共類UserServiceImpl實現UserService {'' @ Autowired' '@Qualifier( 「userDAO的」)'' 私人的UserDAO userDAO的;'' @ Autowired' '@Qualifier(「profileDAO 「)' '私人ProfileDAO profileDAO;' '...' '}' – 2014-09-03 06:44:57

0

這是一個JDK & JRE問題。我使用JDK 6後,我更改爲JDK 7,它工作正常。

相關問題