জুনিটে পরীক্ষাগুলি অ্যালিপসে পাস করে তবে ম্যাভেন শিয়ারফায়ারে ব্যর্থ হয়


99

আমি JUnit 4 এবং স্প্রিং-পরীক্ষা লাইব্রেরি ব্যবহার করে কিছু JUnit পরীক্ষা লিখেছি। যখন আমি Eclipse এর ভিতরে পরীক্ষাগুলি চালাচ্ছি তখন সূক্ষ্মভাবে চালান এবং পাস করব। তবে আমি যখন মাভেন (বিল্ড প্রক্রিয়া চলাকালীন) ব্যবহার করে তাদের চালাচ্ছি তখন তারা একটি বসন্ত সম্পর্কিত ত্রুটি দিতে ব্যর্থ হয়। আমি নিশ্চিত না যে কি কারণে সমস্যা সৃষ্টি করছে, ইউনাইট, শিওরফায়ার বা স্প্রিং। এখানে আমার টেস্ট কোড, বসন্তের কনফিগারেশন এবং আমি মাভেনের কাছ থেকে প্রাপ্ত ব্যতিক্রমগুলি দিচ্ছি:

পার্সন সার্ভিসটেষ্ট.জভা

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>

ম্যাভেনে ব্যতিক্রম

-------------------------------------------------------
 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

আপনার পিএমএমে নিশ্চিতফায়ার প্লাগইনের কোনও বিশেষ কনফিগারেশন রয়েছে?
ম্যাট বি

@ ম্যাট আমার পোমে নিশ্চিত আগুনের জন্য আমার কোনও কনফিগারেশন নেই
অভিনব সরকার

4
আমি এই নিবন্ধে এসেছি কারণ আমার একই সমস্যা ছিল, তবে আমার ক্ষেত্রে আমি আরও একটি সমাধান ব্যবহার করেছি। আমার পরীক্ষাগুলিতে ডিইবিইউজি লগগুলি সক্ষম করার পরে, আমি জানতে পেরেছিলাম যে স্প্রিং ফ্রেমওয়ার্কটি একটি পুরানো মঙ্গোডিবি ডাটাবেসের নাম খুঁজছিল, এবং এই নামটি আমার ওয়ার্কস্পেসে অন্য একটি প্রকল্প দ্বারা নির্মিত জারের একটি পুরানো সংস্করণে সেট করা হয়েছিল (যদিও এটি এর সাথে বেশ কয়েকবার নির্মিত হয়েছিল) নতুন নাম)। কিছু। মাভেন ক্লেন + আমার .m2 এ লাইব্রেরিগুলি মুছে ফেলছে এবং তারপরে সেই সমস্ত প্রকল্পের মাভেন ইনস্টল করুন সমস্যার সমাধান করে। যদিও প্রকল্পটির কোনও পুরানো জারটি দেখার কোনও কারণ ছিল না (এটি কোথাও ক্যাশে দেওয়া হয়েছিল, দুর্ভাগ্যক্রমে)
কোট্টা

উত্তর:


109

আমি একই সমস্যা ছিল (JUnit ম্যাভেন surefire ব্যর্থ কিন্তু অন্ধকার পাস টেস্ট) এবং সেটিং দ্বারা তার সমাধানের পরিচালিত forkMode করতে সবসময় ম্যাভেন surefire কনফিগারেশনে pom.xml মধ্যে:

<প্লাগিন>
    <groupId> org.apache.maven.plugins </groupId>
    <artifactId> মাভেন-শিফারফায়ার-প্লাগইন </ b> << আর্টিক্ট আইডি>
    <version> 2.12 </version>
    <কনফিগারেশন>
        <forkMode> সর্বদা </forkMode>
    </configration>
</plugin>

শিওরফায়ার প্যারামিটারগুলি: http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html

সম্পাদনা (জানুয়ারী ২০১৪):

হিসাবে পিটার Perháč নির্দিষ্ট, forkMode প্যারামিটার 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>

আরও তথ্যের জন্য কাঁটাচামচ বিকল্প এবং সমান্তরাল পরীক্ষা সম্পাদন দেখুন


6
শুনে ভাল লাগলো. আমার ক্ষেত্রে সমস্যাটি খুব সম্ভবত ছিল যে ইউনাইট পরীক্ষা দ্বারা পড়া একটি কনফিগারেশন ফাইল মেমোরিতে থেকে যায়, পরবর্তী পরীক্ষার ফলাফলকে দূষিত করে। যখন ফর্কমোডটি সত্যে সেট করা থাকে, প্রতিটি পরীক্ষার ক্লাস পার্শ্ব প্রতিক্রিয়া ছাড়াই পরীক্ষাগুলি সম্পাদন করা হয় এমন অন্য গ্যারান্টি দিয়ে সম্পূর্ণ নির্ধারিতভাবে নির্বাহ করা হয়।
সাইমন

4
স্রেফ নিশ্চিতফায়ার ২.১ tried ব্যবহার করে এটি ব্যবহার করে দেখেছি: "ফর্মাকোড প্যারামিটারটি ২.১৪ সংস্করণ থেকে অবচয় করা হয়েছে instead পরিবর্তে ফোরকাউন্ট এবং পুনঃব্যবহার করুন" " সুতরাং সাবধান থাকুন এটি কেবল প্রাক-2.14-এ কাজ করে
পিটার পেরে

4
আপনি সম্ভবত একটি উচ্চতর কাঁটাচামচ গণনা ব্যবহার করতে পারেন, এখানে গুরুত্বটি হ'ল কাঁটাচামচ পুনরায় ব্যবহার করা হয় না এবং একটি একক কাঁটাচামচ প্যাকেজ বিল্ডগুলিকে খুব দীর্ঘ সময় নেয়।
স্যান্ডি সিমন্তন

4
আপনার উত্তর দুটি বছর পরে আপডেট করার জন্য প্লাস ওয়ান
গারবেন রাম্পার্ট

4
@ স্টেভেম্বার্স আমি এখানে একটু দেরি করেছি, তবে আমি প্রতি সিপিইউ কোর 1 টি যুক্তিসঙ্গত বলে মনে করি (ফর্ককাউন্ট = 1 সি) - এটি অবশ্যই বিল্ড মেশিনের উপর নির্ভর করে।
স্যান্ডি সিমন্তন

7

আমি হঠাৎ এই ত্রুটিটি অনুভব করেছি এবং আমার জন্য সমাধানটি ছিল সমান্তরালে পরীক্ষা চালানো অক্ষম করা।

আপনার মাইলেজটি ভিন্ন হতে পারে, যেহেতু আমি ক্লাসে´ দ্বারা সমান্তরাল পরীক্ষা চালানোর জন্য নিশ্চিতফায়ার কনফিগার করে ব্যর্থ পরীক্ষার সংখ্যা কমিয়ে আনতে পারি .:

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

যেমনটি আমি প্রথম লিখেছি, এটি আমার পরীক্ষার স্যুটটির পক্ষে যথেষ্ট ছিল না, তাই আমি <configuration>বিভাগটি সরিয়ে সমান্তরালটিকে সম্পূর্ণ অক্ষম করে দিয়েছি ।


7

আমারও অনুরূপ সমস্যা ছিল, @Autowiredঅ্যাকলিপসে সূক্ষ্মভাবে কাজ করার সময় টেস্ট কোডটিতে টীকাটি মাভেন কমান্ড লাইন ব্যবহার করে কাজ করে না। আমি মাত্র আমার JUnit সংস্করণটি 4.4 থেকে 4.9 থেকে আপডেট করেছি এবং সমস্যার সমাধান হয়েছে।

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

5

এটি আপনার অবস্থার সাথে হুবহু প্রযোজ্য নয়, তবে আমারও একই জিনিস ছিল - মাভেনের পরীক্ষার লক্ষ্যটি যখন চালানো হয়েছিল তখন এক্সিলিপসে পাস হওয়া পরীক্ষাগুলি ব্যর্থ হয়েছিল।

এটি আমার স্যুটটিতে একটি পৃথক প্যাকেজের আগে পরীক্ষা হতে দেখা গেছে । সমাধান করতে আমার এক সপ্তাহ লেগে গেল!

আগের পরীক্ষাটি কিছু লগব্যাক ক্লাস পরীক্ষা করছিল এবং একটি কনফিগার ফাইল থেকে লগব্যাক প্রসঙ্গ তৈরি করেছিল।

পরবর্তী পরীক্ষাটি বসন্তের সিম্পলরেস্টটেম্প্লেটের একটি সাবক্লাস পরীক্ষা করছিল, এবং কোনওভাবে, পূর্ববর্তী লগব্যাক প্রসঙ্গটি অনুষ্ঠিত হয়েছিল, ডিইবিইউজি চালু ছিল। এটি এইচটিটিপিস্ট্যাটাস ইত্যাদি লগ করতে রেস্টটেম্পলেটটিতে অতিরিক্ত কল করা হয়েছিল caused

কেউ কখনও এই পরিস্থিতিতে পড়ে কিনা তা পরীক্ষা করা অন্য বিষয়। আমি আমার লগব্যাক পরীক্ষার ক্লাসে কিছু মক ইনজেকশন দিয়ে আমার সমস্যাটি সমাধান করেছি, যাতে কোনও আসল লগব্যাক প্রসঙ্গ তৈরি না হয়।


পয়েন্টারের জন্য ধন্যবাদ। আমি একই ধরণের সমস্যায় পড়েছি যেখানে ডিফল্ট মেভেন প্রকল্পটির একটি traditionalতিহ্যবাহী পরীক্ষার কেস স্বয়ংক্রিয়ভাবে তৈরি হয়েছিল (যা আমি উপেক্ষা করেছি) যখন আমি আমার নতুন পরীক্ষার মামলার জন্য স্প্রিংজ ইউনাইট 4 ক্লাসরনার ব্যবহার করছি। অটো-জেনারেটেড পরীক্ষায় স্প্রিংজইউনিত 4 ক্লাসরনার টীকা যুক্ত করা এটি আমার পক্ষে সমাধান হয়েছে।
অবনীশ

5

আমারও একই সমস্যা রয়েছে তবে ইন্টেলিজ আইডিইএ + মাভেন + টেস্টএনজি + স্প্রিং-টেস্টের সাথে। ( স্প্রিং-টেস্ট অবশ্যই আবশ্যক :)) আমি যখন সমান্তরালভাবে রান টেস্টগুলি অক্ষম করতে ম্যাভেন-শিফারফায়ার-প্লাগইন এর কনফিগারেশন পরিবর্তন করেছি তখন এটি ঠিক করা হয়েছিল । এটার মত:

<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>

4

পরীক্ষার প্রয়োগের ফলাফলটি বিভিন্ন সমস্যার জন্য JUnit runএবং এর থেকে পৃথক maven installবলে মনে হয়।

থ্রেডের পুনরায় ব্যবহার পরীক্ষার কার্যকারিতা অক্ষম করা আমাদের ক্ষেত্রেও লক্ষণ থেকে মুক্তি পেয়েছিল তবে কোডটি থ্রেড-নিরাপদ নয় এমন ধারণাটি এখনও প্রবল ছিল।

আমাদের ক্ষেত্রে পার্থক্যটি ছিল শিমের উপস্থিতির কারণে যা পরীক্ষার আচরণটি পরিবর্তন করে। শুধু JUnit পরীক্ষা চালানো জরিমানা হতে পারে, কিন্তু প্রকল্প installলক্ষ্য চালানো ব্যর্থ পরীক্ষার ক্ষেত্রে ঘটবে। যেহেতু এটি উন্নয়নের অধীনে পরীক্ষার মামলা ছিল, এটি অবিলম্বে সন্দেহজনক ছিল।

এর ফলে আরও একটি পরীক্ষার কেসটি বসন্তের মাধ্যমে একটি শিমের তাত্ক্ষণিক চাপ দিচ্ছিল যা নতুন পরীক্ষার কেস কার্যকর না হওয়া পর্যন্ত বেঁচে থাকবে। শিমের উপস্থিতি কিছু শ্রেণীর আচরণ পরিবর্তন করে এবং ব্যর্থ ফলাফল তৈরি করছিল।

আমাদের ক্ষেত্রে সমাধানটি শিম থেকে মুক্ত হচ্ছিল, যা প্রথম স্থানে প্রয়োজন ছিল না ( অনুলিপি + পেস্ট বন্দুক থেকে আরও একটি পুরস্কার )।

আমি এই লক্ষণযুক্ত প্রত্যেককে মূল কারণ কী তা তদন্ত করার পরামর্শ দিচ্ছি। পরীক্ষার সম্পাদনায় থ্রেডের পুনরায় ব্যবহার অক্ষম করা কেবল এটির আড়াল হতে পারে।


3

আমার একই সমস্যা ছিল, তবে আমার জন্য সমস্যাটি হ'ল জাভা আসক্তিগুলি (যেমন দাবী (num> 0)) একটিগ্রহের জন্য সক্ষম ছিল না, তবে মেভেন চালানোর সময় সক্ষম হয়েছিল।

সুতরাং Eclipse থেকে jUnit পরীক্ষা চালানো দৃser়তা ত্রুটিটিকে ট্রিগার করতে পারেনি।

এটি ইউনাইট ৪.১১ ব্যবহার করার সময় স্পষ্ট করে দেওয়া হয়েছে (আমি যে পুরানো সংস্করণটি ব্যবহার করছিলাম তার বিপরীতে) কারণ এটি দৃ error়তা ত্রুটিটি প্রিন্ট করে eg

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)


... এবং গ্রেডের ক্ষেত্রে এটি যুক্ত করুন: পরীক্ষা করুন {সক্ষমঅ্যাসেরেশনগুলি = মিথ্যা উপেক্ষা করুনফল = সত্য}
ওহাদআর

3

আমার একটি ভিন্ন কারণ এবং সেইজন্য ভিন্ন সমাধানের সাথে একই রকম সমস্যা ছিল। আমার ক্ষেত্রে, আমার আসলে একটি ত্রুটি হয়েছিল যেখানে একটি সিঙ্গলটন অবজেক্টে কোনও সদস্যের পরিবর্তনশীল একটি নন-থ্রেডসেফ পদ্ধতিতে পরিবর্তন করা হয়েছিল। এই ক্ষেত্রে, গৃহীত উত্তরগুলি অনুসরণ করা এবং সমান্তরাল পরীক্ষার অবতারণা কেবল ত্রুটিটি আড়াল করে যা প্রকৃতপক্ষে পরীক্ষার মাধ্যমে প্রকাশিত হয়েছিল। আমার সমাধানটি অবশ্যই ডিজাইনটি ঠিক করা যাতে আমার কোডে আমার এই খারাপ আচরণ না হয়।


2

[আমি নিশ্চিত নই যে এটি আসল প্রশ্নের উত্তর, যেহেতু এখানে স্ট্যাকট্রেস কিছুটা আলাদা দেখায়, তবে এটি অন্যের পক্ষে কার্যকর হতে পারে]]

আপনি যখন কোবার্টুরাও চালাচ্ছেন (কোড কভারেজ রিপোর্ট পাওয়ার জন্য) সুরফায়ারে ব্যর্থ পরীক্ষা পেতে পারেন। এটি কারণ কোবার্টুরার জন্য প্রক্সি প্রয়োজন (কোড ব্যবহারের পরিমাপ করতে) এবং তাদের এবং স্প্রিং প্রক্সির মধ্যে একধরণের দ্বন্দ্ব রয়েছে। এটি কেবল তখন ঘটে যখন স্প্রিং cglib2 ব্যবহার করে, যা যদি উদাহরণস্বরূপ, আপনার কাছে proxy-target-class="true"থাকে বা যদি আপনার এমন কোনও বস্তু থাকে যা প্রক্স হয় যা ইন্টারফেস প্রয়োগ করে না।

এটির স্বাভাবিক ফিক্সটি হল একটি ইন্টারফেস যুক্ত করা। সুতরাং, উদাহরণস্বরূপ, ডিএওগুলি ইন্টারফেস হওয়া উচিত, একটি ডিএওআইএমপিএল ক্লাস দ্বারা প্রয়োগ করা হয়। আপনি যদি ইন্টারফেসটিতে স্বতঃশক্তি স্থাপন করেন তবে সবকিছু ঠিকঠাক হবে (কারণ cglib2 আর প্রয়োজন হয় না; পরিবর্তে ইন্টারফেসে একটি সহজ জেডিকে প্রক্সি ব্যবহার করা যেতে পারে এবং কোবার্টুরা এটির সাথে সূক্ষ্মভাবে কাজ করে)।

তবে, আপনি টীকাযুক্ত নিয়ন্ত্রণকারীদের সাথে ইন্টারফেসগুলি ব্যবহার করতে পারবেন না (সার্লেলে কন্ট্রোলারটি ব্যবহার করার চেষ্টা করার সময় আপনি রানটাইম ত্রুটি পাবেন) - কন্ট্রোলারদের অটোওয়ার করে কোবার্টুরা + স্প্রিং পরীক্ষার জন্য আমার কাছে কোনও সমাধান নেই।


2

আমার একই রকম সমস্যা ছিল: জুনিট পরীক্ষাগুলি ম্যাভেন সুরফায়ারে ব্যর্থ হয়েছিল তবে আমি যখন স্প্রিংসোর্স বান্ডেল রিপোজিটরি থেকে জুনায়েট লাইব্রেরি সংস্করণ 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>

এটি আমার জন্য কৌশলটি করেছে। কমান্ড লাইন থেকে মাভেনকে দৌড়ালে আমার পরীক্ষাগুলি তত্ক্ষণাত্ ছড়িয়ে পড়ে। একিপসে, তবে, ইউনাইট উইন্ডোতে ইউনিট পরীক্ষা চলার আগে আমাকে প্রকল্পটি বন্ধ করে পুনরায় খুলতে হয়েছিল।
মারভো

1

আমার আজ এই পদ্ধতিটি পরীক্ষা করে এমন একটি পদ্ধতি যা পরীক্ষিত যা Mapএকটি জেএসওএন স্ট্রিংতে থাকা একটি বস্তুকে রূপান্তর করে । আমি ধরে নিচ্ছি যে Eclipse এবং মাভেন নিশ্চিত ফায়ার প্লাগইন বিভিন্ন জেআরই ব্যবহার করছিল যার HashMapঅর্ডারের বিভিন্ন বাস্তবায়ন ছিল বা কোনও কিছুর ফলস্বরূপ , যেটি পরীক্ষা গ্রহণের মাধ্যমে অ্যালিপ্সের মধ্য দিয়ে চলেছিল এবং পরীক্ষাগুলি ফায়ার ( assertEqualsব্যর্থ) হয়ে যায়। সবচেয়ে সহজ সমাধানটি হ'ল মানচিত্রটির একটি বাস্তবায়ন ব্যবহার করা হয়েছিল যাতে নির্ভরযোগ্য অর্ডার ছিল।


0

আপনাকে ইতিমধ্যে জাপা ট্রান্সজেকশন ম্যানেজারে কোনও ডেটাসোর্স ইনজেকশন দেওয়ার দরকার নেই যেহেতু ইতিমধ্যে এনটিটিম্যানেজারফ্যাক্টির একটি ডেটা সোর্স রয়েছে। নিম্নলিখিত চেষ্টা করুন:

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

পরীক্ষার ব্যর্থতা (ত্রুটি সহ) যদি আমি লেনদেনের ব্যবসার মটর থেকে ডেটা উত্স সরিয়ে ফেলি তবে গ্রহটিতে পরীক্ষা (ব্যর্থতা সহ) fail
অভিনব সরকার

0

সাধারণত যখন পরীক্ষা গ্রহণে পাস হয় এবং মাভেনের সাথে ব্যর্থ হয় এটি একটি শ্রেণিবদ্ধ সমস্যা কারণ এটি উভয়ের মধ্যে প্রধান পার্থক্য।

সুতরাং আপনি ম্যাভেন-এক্স পরীক্ষার মাধ্যমে ক্লাসপথটি পরীক্ষা করতে পারেন এবং মেনুগুলির মাধ্যমে বা আপনার প্রকল্পের মূলের .classpath ফাইলটিতে গ্রহপথের ক্লাসপাথটি পরীক্ষা করতে পারেন।

আপনি কি নিশ্চিত যে উদাহরণস্বরূপ যে personservice-test.xML ক্লাসপথে রয়েছে?


হ্যাঁ, কারণ আমি ম্যাভেন টেস্ট রান চলাকালীন কনসোলে স্প্রিং প্রসঙ্গের লোডিংয়ের INFO লগগুলি দেখতে পাচ্ছি।
অভিনব সরকার

0

এটি আমার সমস্যা সমাধানে আমাকে সহায়তা করেছে। আমার যে অনুরূপ লক্ষণ ছিল সেগুলিতেও ব্যর্থ হবে তবে জুনিট পরীক্ষা চলমান ঠিক আছে।

এটি হিসাবে দেখা যাচ্ছে যে আমার পিতামাতার pom.xml এ নিম্নলিখিত সংজ্ঞা রয়েছে:

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

আর আমার প্রকল্পে আমি এটিকে আর্গলাইনটি সরাতে ওভাররাইড করি:

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

আশা করি এটি নিশ্চিতফায়ার প্লাগইন সমস্যার সমাধানে কাউকে সহায়তা করবে।



0

আমার একই সমস্যা ছিল এবং আমার জন্য সমাধানটি ছিল মাভেনকে স্থানীয় জার্স সহ সমস্ত নির্ভরতা পরিচালনা করতে দেওয়া। আমি অনলাইন নির্ভরতার জন্য মাভেন এবং স্থানীয় নির্ভরতার জন্য ম্যানুয়ালি বিল্ড পাথ কনফিগার করেছি। সুতরাং, ম্যাভেন নিজে নিজে কনফিগার করেছেন এমন নির্ভরতা সম্পর্কে অবগত ছিল না।

আমি এই সমাধানটি স্থানীয় জার নির্ভরতাগুলি মাভেনের মধ্যে ইনস্টল করতে ব্যবহার করেছি:

মাভেন প্রকল্পে কীভাবে স্থানীয় জার ফাইল যুক্ত করবেন?


0

আমার ক্ষেত্রে কারণটি কোডে একটি বাগ ছিল। পরীক্ষাটি একটিতে উপাদানগুলির একটি নির্দিষ্ট ক্রমের উপর নির্ভর করে HashSet, যা গ্রহন বা মাভেন সুরফায়ারে চালিত হওয়ার সময় আলাদা হতে পারে।


-2

আপনার কনফিগারেশন ফাইলগুলি সম্ভবত এসআরসি / প্রধান / সংস্থানগুলিতে থাকে , তবে মাভেনের অধীনে সঠিকভাবে কাজ করার জন্য সেগুলি অবশ্যই এসসিআর / পরীক্ষা / সংস্থার অধীনে থাকতে হবে ।

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

আমি দু'বছরের কারণে এর জবাব দিচ্ছি কারণ আমি এই উত্তরটি এখানে পাইনি এবং আমি মনে করি এটি সঠিক one


না, এটি অন্যদিকে। src/main/resourcesপরীক্ষাগুলিতে দৃশ্যমান, তবে src/test/resourcesউত্পাদন কোডে দৃশ্যমান নয়।
ক্রিস্টোফার হামারস্ট্রিম

আপনি যে লিঙ্কটি যুক্ত করেছেন তা প্রকল্পের মধ্যে নির্ভরতা সম্পর্কে কথা বলছে , একই প্রকল্পের মূল / পরীক্ষার মধ্যে নয়
eis
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.