2016-10-25 38 views
0

我用JHipster代碼生成器和Spring Boot在後端編寫了一個小應用程序。JUnit Spring Boot Application - 無法自動填充字段

對於我的應用我試圖寫一些簡單的單元/集成測試,但我有一個錯誤:Could not autowire. No beans of <type> found。我正在使用IntelliJ IDE,最新版本。這是我的一段代碼:

package com.logate.adminpanel.web.rest; 

import com.logate.adminpanel.CrmScoringApp; import 
com.logate.adminpanel.repository.CityRepository; import 
com.logate.adminpanel.service.CityService; import org.junit.Test; 
import org.junit.runner.RunWith; import 
org.springframework.boot.test.SpringApplicationConfiguration; import 
org.springframework.test.context.ContextConfiguration; import 
org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.test.context.web.WebAppConfiguration; 
import org.springframework.transaction.annotation.Transactional; 
import org.springframework.util.Assert; 

import javax.inject.Inject; 

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = CrmScoringApp.class) 
@WebAppConfiguration 
public class CityRestTest { 

    @Inject 
    private CityService cityService; 

    @Inject 
    private CityRepository cityRepository; 

    @Test 
    public void test() 
    { 
     Assert.isNull(null); 
    } 
} 

我無法弄清楚這裏有什麼問題。

這裏是我的啓動應用程序類:

package com.logate.adminpanel; 

import com.logate.adminpanel.config.Constants; 
import com.logate.adminpanel.config.JHipsterProperties; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration; 
import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; 
import org.springframework.boot.context.properties.EnableConfigurationProperties; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.core.env.Environment; 
import org.springframework.core.env.SimpleCommandLinePropertySource; 

import javax.annotation.PostConstruct; 
import javax.inject.Inject; 
import java.net.InetAddress; 
import java.net.UnknownHostException; 
import java.util.Arrays; 
import java.util.Collection; 

@ComponentScan 
@EnableAutoConfiguration(exclude = { MetricFilterAutoConfiguration.class, MetricRepositoryAutoConfiguration.class }) 
@EnableConfigurationProperties({ JHipsterProperties.class, LiquibaseProperties.class }) 
public class CrmScoringApp { 

    private static final Logger log = LoggerFactory.getLogger(CrmScoringApp.class); 

    @Inject 
    private Environment env; 

    /** 
    * Main method, used to run the application. 
    * 
    * @param args the command line arguments 
    * @throws UnknownHostException if the local host name could not be resolved into an address 
    */ 
    public static void main(String[] args) throws UnknownHostException { 
     SpringApplication app = new SpringApplication(CrmScoringApp.class); 
     SimpleCommandLinePropertySource source = new SimpleCommandLinePropertySource(args); 
     addDefaultProfile(app, source); 
     Environment env = app.run(args).getEnvironment(); 
    log.info("\n----------------------------------------------------------\n\t" + 
      "Application '{}' is running! Access URLs:\n\t" + 
      "Local: \t\thttp://127.0.0.1:{}\n\t" + 
      "External: \thttp://{}:{}\n----------------------------------------------------------", 
     env.getProperty("spring.application.name"), 
     env.getProperty("server.port"), 
     InetAddress.getLocalHost().getHostAddress(), 
     env.getProperty("server.port")); 
} 

/** 
* If no profile has been configured, set by default the "dev" profile. 
*/ 
private static void addDefaultProfile(SpringApplication app, SimpleCommandLinePropertySource source) { 
    if (!source.containsProperty("spring.profiles.active") && 
      !System.getenv().containsKey("SPRING_PROFILES_ACTIVE")) { 

     app.setAdditionalProfiles(Constants.SPRING_PROFILE_DEVELOPMENT); 
    } 
} 

/** 
* Initializes admin_panel. 
* <p> 
* Spring profiles can be configured with a program arguments --spring.profiles.active=your-active-profile 
* <p> 
* You can find more information on how profiles work with JHipster on <a href="http://jhipster.github.io/profiles/">http://jhipster.github.io/profiles/</a>. 
*/ 
@PostConstruct 
public void initApplication() { 
    if (env.getActiveProfiles().length == 0) { 
     log.warn("No Spring profile configured, running with default configuration"); 
    } else { 
     log.info("Running with Spring profile(s) : {}", Arrays.toString(env.getActiveProfiles())); 
     Collection<String> activeProfiles = Arrays.asList(env.getActiveProfiles()); 
     if (activeProfiles.contains(Constants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(Constants.SPRING_PROFILE_PRODUCTION)) { 
      log.error("You have misconfigured your application! " + 
       "It should not run with both the 'dev' and 'prod' profiles at the same time."); 
     } 
     if (activeProfiles.contains(Constants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(Constants.SPRING_PROFILE_CLOUD)) { 
      log.error("You have misconfigured your application! " + 
       "It should not run with both the 'dev' and 'cloud' profiles at the same time."); 
      } 
     } 
    } 
} 

這裏是城市的倉儲類:

package com.logate.adminpanel.repository; 

import com.logate.adminpanel.domain.City; 
import org.springframework.data.jpa.repository.JpaRepository; 

/** 
* Spring Data JPA repository for the City entity. 
*/ 
public interface CityRepository extends JpaRepository<City,Long> { 

} 

,這裏是城市服務類:

package com.logate.adminpanel.service; 

import com.logate.adminpanel.domain.City; 
import com.logate.adminpanel.repository.CityRepository; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.data.domain.Page; 
import org.springframework.data.domain.Pageable; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 

import javax.inject.Inject; 

/** 
* Service Implementation for managing City. 
*/ 
@Service 
@Transactional 
public class CityService { 

    private final Logger log = LoggerFactory.getLogger(CityService.class); 

    @Inject 
    private CityRepository cityRepository; 

    /** 
    * Save a city. 
    * 
    * @param city the entity to save 
    * @return the persisted entity 
    */ 
    public City save(City city) { 
     log.debug("Request to save City : {}", city); 
     City result = cityRepository.save(city); 

     return result; 
} 


    @Transactional(readOnly = true) 
    public Page<City> findAll(Pageable pageable) { 
     log.debug("Request to get all Cities"); 
     Page<City> result = cityRepository.findAll(pageable); 
     return result; 
    } 

    @Transactional(readOnly = true) 
    public City findOne(Long id) { 
     log.debug("Request to get City : {}", id); 
     City city = cityRepository.findOne(id); 
     return city; 
    } 

    public void delete(Long id) { 
     log.debug("Request to delete City : {}", id); 
     cityRepository.delete(id); 
    } 
} 

堆棧跟蹤:

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 30.66 sec <<< FAILURE! - in com.logate.adminpanel.web.rest.CityResourceIntTest 
firstTest(com.logate.adminpanel.web.rest.CityResourceIntTest) Time elapsed: 0.018 sec <<< ERROR! 
java.lang.IllegalStateException: Failed to load ApplicationContext 
     at  org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDeleg ate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) 
     at  org.springframework.test.context.support.DefaultTestContext.getApplication Context(DefaultTestContext.java:83) 
     at  org.springframework.test.context.support.DependencyInjectionTestExecutionL istener.injectDependencies(DependencyInjectionTestExecutionListener.java:117) 
     at  org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) 
     at  org.springframework.test.context.TestContextManager.prepareTestInstance(Te stContextManager.java:228) 
     at  org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest (SpringJUnit4ClassRunner.java:230) 
     at  org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) 
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128) 
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 

控制檯錯誤鏈接:https://jpst.it/OJM6

有沒有人有想法?先謝謝你。

+0

哪個''它找不到豆? – kjsebastian

+0

CityService和CityRepository –

+0

你能編輯你的問題來添加這兩個嗎?或者將示例項目上傳到github的其他地方 – kjsebastian

回答

2

您的例外是由:java.lang.IllegalStateException: Tomcat connector in failed state引起的。通常在tomcat使用的端口已被使用時發生。嘗試更改server.port中的src/test/resources/config/application.yml文件

+0

我試過這個,但它不會工作。拋出異常:java.lang.IllegalStateException:無法加載ApplicationContext –

+0

您在項目中啓用了jpa存儲庫嗎? – eparvan

+0

如果您能夠提供完整的錯誤日誌堆棧 – eparvan

1

您的stackstrace告訴您的com.logate.adminpanel.web.rest.CityResourceIntTest測試失敗,而不是您的CityRestTest。

如果你想擁有你的測試提供給gradle test(這是如果你使用CI/CD系統非常推薦),類名必須遵循一個nameconvention,含有「XXXIntTest」或「XXXUnitTest」 ...

我會看你的CityResourceIntTest,因爲失敗在那裏......並將你的休息測試重新命名爲正確的名稱常規。

+0

我已將我的課程更名爲CityResourceIntTest,但我忘了在我的問題中重命名它。錯誤再次一樣。 –

+0

CityResourceIntTest.firstTest»IllegalState無法加載ApplicationContext –