繁体   English   中英

JUnit Test在Local上运行,但在Jenkins上运行

[英]JUnit Test runs on Local but not on Jenkins

我和詹金斯有个奇怪的错误。

Jenkins服务器与本地测试在同一台计算机上,但这是我所拥有的:

当我在Local上运行关于名为CarStatusDao的类的4个测试时(通过运行cmd Windows),在输出中:

Running net.****.****.dao.carstatus.CarStatusDaoTest

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 sec

测试没有任何问题。

当我执行完全相同的代码,但在Jenkins(从SVN获得完全相同的代码):

Running net.****.****.dao.carstatus.CarStatusDaoTest

2015-07-31 15:29:21,497 ERROR [org.springframework.test.context.TestContextManager] - Caught exception while allowing TestExecutionListener 
[org.springframework.test.context.support.DependencyInjectionTestExecutionListener@c316b9] to prepare test instance [net.****.****.dao.carstatus.CarStatusDaoTest@1121079]
org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'net.****.****.dao.carstatus.CarStatusDaoTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: net.****.****.dao.CarStatusDao net.****.****.dao.carstatus.CarStatusDaoTest.carStatusDAO; 
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No matching bean of type [net.****.****.dao.CarStatusDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1120)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:379)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:110)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) 
    at [...]

Tests run: 4, Failures: 0, Errors: 4, Skipped: 0, Time elapsed: 0.011 sec <<< FAILURE!

从这些日志中,重要的部分是:

Error creating bean with name 'net.****.****.dao.carstatus.CarStatusDaoTest': 
Injection of autowired dependencies failed; 
nested exception is org.springframework.beans.factory.BeanCreationException:
Could not autowire field: net.****.****.dao.CarStatusDao net.****.****.dao.carstatus.CarStatusDaoTest.carStatusDAO; 

所以基本上,在本地Maven能够在类CarStatusDaoTest autowired carStatusDAO我的属性carStatusDAO ,但是当我在Jenkins上运行它时,它无法...:/

我不明白为什么这样的不同行为,而Maven是相同的,代码也是相同的....:/

我认为这是一个类路径问题 ,因为这是唯一不同的事情:/

但我不知道如何解决它。

对于上下文,这是我的/META-INF/spring/carfleet-dao-test-context.xml:

<context:component-scan base-package="net.****.****" />

<jd:embedded-database id="dataSource" type="HSQL">
    <jd:script location="classpath:sql/hsql-schema.sql" />
    <jd:script location="classpath:sql/test-data.sql" />
</jd:embedded-database>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
    <property name="persistenceUnitName" value="testunit" />
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" >
        <list>
            <value>net.****.****.domain</value>
        </list>
    </property>
</bean>

<bean
    class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven />

这是我的类CarStatusDaoTest的定义:

public class CarStatusDaoTest extends AbstractDaoTest {

    @Autowired
    CarStatusDao carStatusDAO;

    @Test
    public void getCurrentStatusOfCarTesting() {

        carStatus = carStatusDAO.getCurrentStatusOfCar(-1L);
        assertEquals(carStatus, null);
    }

    [...]
}

以下是我所有测试的母班:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:/META-INF/spring/carfleet-dao-test-context.xml")
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class AbstractDaoTest {

    @Autowired
    private EntityFactory entityFactory;

    public EntityFactory getEntityFactory() {
        return entityFactory;
    }

    @Test
    public void shouldEntityFactoryBeNotNull() {

        assertNotNull(entityFactory);
    }
}

在此先感谢,最诚挚的问候。

编辑

这是Jenkins上显示的Maven配置:

Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T13:57:37+02:00)
Maven home: C:\Program Files\Maven
Java version: 1.7.0_80-ea, vendor: Oracle Corporation
Java home: C:\Java\jdk1.7.0_80\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"

这是Windows控制台中mvn -v的结果:

Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T13:57:37+02:00)
Maven home: C:\Program Files\Maven
Java version: 1.7.0_80-ea, vendor: Oracle Corporation
Java home: C:\Java\jdk1.7.0_80\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"   

这只是CarStatusDaoImplCarStatusDaoImpl被提交的问题......

随着每个类在SVN上提交,Jenkins正在获取它们:

Running net.****.****.dao.carstatus.CarStatusDaoTest

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.036 sec

出现在詹金斯身上! 谢谢@ nesohc

当jenkins工作在运行本地时提到browserCapabilties时,我得到这个bean相关的错误。 删除browserCapbilties并运行作业后,本地没有抛出此错误并且测试通过 在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM