programing

JUnit 테스트는 이클립스에서는 합격하지만 Maven Surefire에서는 불합격

goodsources 2022. 11. 19. 11:36
반응형

JUnit 테스트는 이클립스에서는 합격하지만 Maven Surefire에서는 불합격

JUnit 4와 스프링 테스트 라이브러리를 사용하여 JUnit 테스트를 작성했습니다.내가 이클립스 안에서 테스트를 실행했을 때, 잘 실행해서 통과했어.그러나 Maven을 사용하여 실행하면(빌드 프로세스 중에) 스프링 관련 오류가 발생합니다.JUnit, Surefire 또는 Spring 중 무엇이 문제의 원인인지 잘 모르겠습니다.다음은 테스트 코드, 스프링 구성 및 Maven에서 얻은 예외입니다.

Person Service Test.java

package com.xyz.person.test;

import static com.xyz.person.util.FjUtil.toFjList;
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

import com.xyz.person.bo.Person;
import com.xyz.person.bs.PersonService;

import fj.Effect;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:personservice-test.xml" })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
public class PersonServiceTest {

    @Autowired
    private PersonService service;

    @Test
    @Transactional
    public void testCreatePerson() {
        Person person = new Person();
        person.setName("abhinav");
        service.createPerson(person);

        assertNotNull(person.getId());
    }

    @Test
    @Transactional
    public void testFindPersons() {
        Person person = new Person();
        person.setName("abhinav");
        service.createPerson(person);

        List<Person> persons = service.findPersons("abhinav");
        toFjList(persons).foreach(new Effect<Person>() {
            public void e(final Person p) {
                assertEquals("abhinav", p.getName());
            }});
    }

}

personservice-test.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <import resource="classpath:/personservice.xml" />

    <bean id="datasource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource"
        lazy-init="true">
        <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" />
        <property name="url" value="jdbc:derby:InMemoryDatabase;create=true" />
    </bean>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="datasource" />
        <property name="persistenceUnitName" value="PersonService" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="databasePlatform" value="org.hibernate.dialect.DerbyDialect" />
                <property name="showSql" value="true" />
                <property name="generateDdl" value="true" />
            </bean>
        </property>
        <property name="jpaPropertyMap">
            <map>
                <entry key="hibernate.validator.autoregister_listeners" value="false" />
                <entry key="javax.persistence.transactionType" value="RESOURCE_LOCAL" />
            </map>
        </property>
    </bean>

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

    <tx:annotation-driven transaction-manager="transactionManager"
        proxy-target-class="false" />

    <bean id="beanMapper" class="org.dozer.DozerBeanMapper">
        <property name="mappingFiles">
            <list>
                <value>personservice-mappings.xml</value>
            </list>
        </property>
    </bean>

</beans>

Maven에서의 예외

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.xyz.person.test.PersonServiceTest
23:18:51,250  WARN JDBCExceptionReporter:77 - SQL Warning: 10000, SQLState: 01J01
23:18:51,281  WARN JDBCExceptionReporter:78 - Database 'InMemoryDatabase' not created, connection made to existing database instead.
23:18:52,937  WARN JDBCExceptionReporter:77 - SQL Warning: 10000, SQLState: 01J01
23:18:52,937  WARN JDBCExceptionReporter:78 - Database 'InMemoryDatabase' not created, connection made to existing database instead.
23:18:52,953  WARN TestContextManager:429 - Caught exception while allowing TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener@359a359a] to process 'after' execution for test: method [public void com.xyz.person.test.PersonServiceTest.testCreatePerson()], instance [com.xyz.person.test.PersonServiceTest@1bc81bc8], exception [org.springframework.transaction.IllegalTransactionStateException: Pre-bound JDBC Connection found! JpaTransactionManager does not support running within DataSourceTransactionManager if told to manage the DataSource itself. It is recommended to use a single JpaTransactionManager for all transactions on a single DataSource, no matter whether JPA or JDBC access.]
java.lang.IllegalStateException: No value for key [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@3f563f56] bound to thread [main]
        at org.springframework.transaction.support.TransactionSynchronizationManager.unbindResource(TransactionSynchronizationManager.java:199)
        at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:489)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1011)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:804)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.endTransaction(TransactionalTestExecutionListener.java:515)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener.endTransaction(TransactionalTestExecutionListener.java:290)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:183)
        at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:426)
        at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:90)
        at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
        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:236)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102)
        at org.apache.maven.surefire.Surefire.run(Surefire.java:180)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:599)
        at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
        at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
23:18:53,078  WARN TestContextManager:377 - Caught exception while allowing TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener@359a359a] to process 'before' execution of test method [public void com.xyz.person.test.PersonServiceTest.testFindPersons()] for test instance [com.xyz.person.test.PersonServiceTest@79f279f2]
org.springframework.transaction.IllegalTransactionStateException: Pre-bound JDBC Connection found! JpaTransactionManager does not support running within DataSourceTransactionManager if told to manage the DataSource itself. It is recommended to use a single JpaTransactionManager for all transactions on a single DataSource, no matter whether JPA or JDBC access.
        at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:304)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.startTransaction(TransactionalTestExecutionListener.java:507)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener.startNewTransaction(TransactionalTestExecutionListener.java:269)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener.beforeTestMethod(TransactionalTestExecutionListener.java:162)
        at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:374)
        at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:73)
        at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
        at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
        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:236)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102)
        at org.apache.maven.surefire.Surefire.run(Surefire.java:180)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:599)
        at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
        at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
Tests run: 3, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 15.625 sec <<< FAILURE!

Results :

Tests in error:
  testCreatePerson(com.xyz.person.test.PersonServiceTest)
  testCreatePerson(com.xyz.person.test.PersonServiceTest)
  testFindPersons(com.xyz.person.test.PersonServiceTest)

Tests run: 3, Failures: 0, Errors: 3, Skipped: 0

같은 문제(Maven Surefire에서는 JUnit 테스트가 실패했지만 Eclipse에서는 통과)가 발생하여 pom.xml에서는 항상 maven surefire 구성으로 forkMode설정하여 문제를 해결할 수 있었습니다.

<blocks><groupId>org.apache.maven.플러그인 </groupId><artifactId>mapen-surefire-plugin</artifactId><version> 2.12 </version><설정><forkMode>항상 </forkMode></설정></filters>

Surefire 파라미터: http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html

편집(2014년 1월):

Peter Perhach가 지적한 와 같이 forkMode 파라미터는 Surefire 2.14 이후 폐지되었습니다.Surefire 2.14부터는 대신 다음을 사용합니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <reuseForks>false</reuseForks>
        <forkCount>1</forkCount>
    </configuration>
</plugin>

자세한 내용은 포크 옵션병렬 테스트 실행을 참조하십시오.

갑자기 이 에러가 발생했기 때문에, 그 해결 방법은 테스트를 동시에 실행할 수 없게 하는 것이었습니다.

"classes":"에 의한 병렬 테스트를 실행하도록 surefire를 설정함으로써 불합격 테스트의 수를 줄일 수 있기 때문에 마일리지가 다를 수 있습니다.

            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <parallel>classes</parallel>
                    <threadCount>10</threadCount>
                </configuration>
            </plugin>

대로 에 병행 을 완전히 해제 후 디세이블이 .<configuration>★★★★★★ 。

가 시험 실행 결과와 .JUnit run 및서에서maven install몇 가지 문제의 증상인 것 같습니다.

테스트 실행을 사용한 스레드 재사용을 무효화함으로써 이 경우에도 증상이 사라졌지만, 코드가 스레드 세이프가 아니라는 느낌은 여전히 강했습니다.

우리의 경우 차이는 테스트 동작을 수정한 콩이 존재했기 때문입니다.하면 문제가 JUnit 를 하면 문제가 .install테스트 실패의 원인이 됩니다.개발 중인 테스트 케이스였기 때문에 즉시 의심을 받았습니다.

또 다른 테스트 케이스는 새로운 테스트 케이스가 실행될 때까지 생존할 수 있는 콩을 봄까지 인스턴스화하는 것이었습니다.빈의 존재는 일부 클래스의 동작을 수정하여 실패한 결과를 생성했습니다.

이 경우의 해결책은 처음부터 필요하지 않았던 콩을 제거하는 것이었습니다(복사+붙여넣기 총의 또 다른 상품).

이 증상이 있는 사람은 모두 근본 원인을 조사해 보는 것이 좋습니다.테스트 실행 시 스레드 재사용을 사용하지 않도록 설정하면 스레드만 숨겨질 수 있습니다.

요.도 있어요@Autowired테스트 코드는 이클립스에서 정상적으로 동작하는 동안 Maven 명령줄을 사용했을 때 작동하지 않았습니다.JUnit 버전을 4.4에서 4.9로 업데이트하면 문제가 해결되었습니다.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.1</version>
</dependency>

이것은 당신의 상황에는 해당되지 않지만, 저도 같은 것이 있었습니다. 이클립스에서 통과되는 테스트는 메이븐의 테스트 목표가 실행되었을 때 실패했습니다.

아까 제 스위트룸에서 다른 패키지로 테스트를 한 것으로 드러났습니다.이걸 푸는 데 일주일이나 걸렸어!

이전 테스트에서는 일부 로그백클래스를 테스트하여 설정 파일에서 로그백콘텍스트를 만들었습니다.

이후 테스트는 Spring의 SimpleRestTemplate 서브클래스를 테스트하고 있었습니다.그 결과 이전 Logback 컨텍스트는 DEBUG를 켠 상태로 유지되었습니다.이로 인해 RestTemplate에서 HttpStatus 등을 기록하기 위한 추가 콜이 이루어졌습니다.

이런 상황에 처하게 될지 확인하는 건 또 다른 문제다.Logback 테스트클래스에 Mock을 삽입하여 문제를 수정하고 실제 Logback 컨텍스트를 생성하지 않도록 했습니다.

저도 같은 문제가 있는데 IntelliJ IDEA + Maven + Test에서NG + 스프링 테스트(스프링 테스트는 필수입니다: )maven-surefire-plugin 설정을 변경하여 병행 실행 테스트를 무효로 했을 때 수정되었습니다.다음과 같이 합니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <skipTests>${maven.test.skip}</skipTests>
        <trimStackTrace>false</trimStackTrace>
        <!--<parallel>methods</parallel>-->
        <!-- to skip integration tests -->
        <excludes>
            <exclude>**/IT*Test.java</exclude>
            <exclude>**/integration/*Test.java</exclude>
        </excludes>
    </configuration>
    <executions>
        <execution>
            <id>integration-test</id>
            <phase>integration-test</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
                <skipTests>${maven.integration-test.skip}</skipTests>
                <!-- Make sure to include this part, since otherwise it is excluding Integration tests -->
                <excludes>
                    <exclude>none</exclude>
                </excludes>
                <includes>
                    <include>**/IT*Test.java</include>
                    <include>**/integration/*Test.java</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>

같은 문제가 있었습니다만, 이클립스에서는 Java 어설션(예를 들어 assert(num > 0)이 유효하게 되어 있지 않고, maven을 실행하고 있을 때에 유효하게 되어 있는 것이 문제였습니다.

따라서 Eclipse에서 jUnit 테스트를 실행해도 어설션 오류가 트리거되지 않았습니다.

이것은 jUnit 4.11을 사용할 때 명확해집니다(사용하던 이전 버전과 달리). 왜냐하면 다음과 같은 어설션 오류를 출력하기 때문입니다.

java.lang.AssertionError: null
    at com.company.sdk.components.schema.views.impl.InputViewHandler.<init>(InputViewHandler.java:26)
    at test.com.company.sdk.util.TestSchemaExtractor$MockInputViewHandler.<init>(TestSchemaExtractor.java:31)
    at test.com.company.sdk.util.TestSchemaExtractor.testCreateViewToFieldsMap(TestSchemaExtractor.java:48)

나는 다른 원인과 다른 해결책으로 비슷한 문제가 있었다.제 경우 싱글톤 객체에 스레드세이프가 아닌 방법으로 멤버 변수가 수정되는 오류가 있었습니다.이 경우 승인된 답을 따르고 병렬 테스트를 회피하면 테스트에 의해 실제로 밝혀진 오류만 숨길 수 있습니다.물론 제 해결책은 디자인을 고치는 것입니다.그러면 제 코드에 이런 나쁜 동작이 생기지 않게 됩니다.

[스택트레이스가 조금 달라 보여서 이 답변이 원래 질문에 대한 답변인지 잘 모르겠습니다만, 다른 사람에게 도움이 될 수도 있습니다.

Cobertura를 실행하고 있는 경우에도 Surefire에서 테스트 실패가 발생할 수 있습니다(코드 커버리지리포트를 취득합니다).이는 Cobertura가 (코드 사용을 측정하기 위해) 프록시를 필요로 하고 이러한 프록시와 Spring 프록시 사이에 일종의 충돌이 있기 때문입니다.이것은 스프링이 cglib2를 사용하는 경우에만 발생합니다.예를 들어, 다음과 같은 경우,proxy-target-class="true"또는 인터페이스를 실장하지 않는 프록시 오브젝트가 있는 경우.

이 문제를 해결하는 일반적인 방법은 인터페이스를 추가하는 것입니다.예를 들어 DAO는 DAOImpl 클래스에 의해 구현되는 인터페이스여야 합니다.인터페이스로 자동 접속하면 모든 것이 정상적으로 동작합니다(cglib2가 불필요해지기 때문에 대신 인터페이스에 대한 단순한 JDK 프록시를 사용할 수 있고 Cobertura가 정상적으로 동작합니다).

단, 주석이 달린 컨트롤러에서는 인터페이스를 사용할 수 없습니다(서블릿에서 컨트롤러를 사용하려고 하면 런타임에러가 발생합니다).컨트롤러를 자동 배선하는 Cobertura + Spring 테스트용 솔루션은 없습니다.

비슷한 문제가 있었습니다.Maven Surefire에서는 JUnit 테스트가 실패했지만 Spring Source Bundle Repository에서 JUnit 라이브러리 버전 4.11.0을 사용했을 때 이클립스에서는 합격했습니다.특정:

<dependency>
    <groupId>org.junit</groupId>
    <artifactId>com.springsource.org.junit</artifactId>
    <version>4.11.0</version>
</dependency>

그 후 JUnit 라이브러리 버전 4.11로 교체하여 정상적으로 동작합니다.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>

오늘 이 문제가 있었습니다.이러한 문제는, 이 오브젝트를 변환하는 방법을 테스트하는 것입니다.MapJSON 문자열로 이동합니다.은 Eclipse의 Maven surefire 하고 있었을 입니다.HashMap하지 못하는(하는 테스트assertEquals 은 신뢰할수 있는 오더를 이었습니다.가장 쉬운 해결책은 신뢰할 수 있는 주문이 있는 Map 구현을 사용하는 것이었습니다.

이것으로 문제의 트러블 슈팅에 도움이 되었습니다.Junit 테스트를 실행해도 Maven이 고장나는 비슷한 증상이 있었습니다.

알고 보니 부모 pom.xml에는 다음 정의가 포함되어 있습니다.

    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.9</version>
      <configuration>
        <forkMode>pertest</forkMode>
        <argLine>-Xverify:none</argLine>
      </configuration>
    </plugin>

프로젝트에서는 argLine을 삭제하기 위해 덮어씁니다.

    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
            <forkMode>pertest</forkMode>
            <argLine combine.self="override"></argLine>
          </configuration>
    </plugin>

이것이 surefire 플러그인의 트러블 슈팅에 도움이 되기를 바랍니다.

아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다. 요소의 순서에 했습니다.HashSet이클립스 메이븐 슈어

나도 비슷한 문제가 있었는데, 이렇게 포크를 재사용할 수 없게 하는 테스트를 실행했어.

mvn clean test -DreuseForks=false

문제는 사라졌습니다.단점은 전체 테스트 실행 시간이 길어지기 때문에 필요한 경우에만 명령줄에서 이 작업을 수행할 수 있습니다.

EntityManagerFactory에는 이미 데이터 소스가 있으므로 JpaTransactionManager에 DataSource를 삽입할 필요가 없습니다.다음을 시도해 보십시오.

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

보통 테스트에서 일식을 통과하고 maven에 실패하면 클래스 패스의 문제가 됩니다.이것은, 이 둘의 주된 차이점이기 때문입니다.

따라서 maven -X 테스트를 사용하여 클래스 경로를 확인하고 메뉴 또는 프로젝트 루트의 .classpath 파일에서 일식의 클래스 경로를 확인할 수 있습니다.

예를 들어 personservice-test.xml이 클래스 패스에 포함됩니까?

저도 같은 문제가 있었습니다.제 해결책은 Maven이 지역 항아리를 포함한 모든 의존관계를 처리할 수 있도록 하는 것이었습니다.온라인 의존관계에서는 Maven을 사용하고 로컬 의존관계에서는 빌드 경로를 수동으로 설정했습니다.따라서 Maven은 수동으로 설정한 의존관계를 인식하지 못했습니다.

이 솔루션을 사용하여 Maven에 로컬 병 의존성을 설치했습니다.

maven 프로젝트에서 로컬 jar 파일을 추가하려면 어떻게 해야 합니다.

대부분의 경우 구성 파일은 src/main/resources에 있지만 maven에서 제대로 작동하려면 src/test/resources 아래에 있어야 합니다.

https://cwiki.apache.org/UIMA/differences-between-running-unit-tests-in-eclipse-and-in-maven.html

2년 후에 답장을 드리는 이유는 이 답을 찾을 수 없었기 때문입니다. 그리고 이게 맞는 답이라고 생각합니다.

언급URL : https://stackoverflow.com/questions/3365628/junit-tests-pass-in-eclipse-but-fail-in-maven-surefire

반응형