إطار اختبار الربيع ومشكلة التوصيل التلقائي المستندة إلى التعليقات التوضيحية

StackOverflow https://stackoverflow.com/questions/3200575

سؤال

أرغب في استخدام تطبيقين مختلفين لـ DAO مع إطار اختبار Spring.

src.main.java

.businessobjects
   \-User.java
.dao
   \-IUserDAO.java
.daojpa
   \-UserDAO.java
.daohibernate
   \-UserDAO.java

اختبار الربيع في:

src.test.java.base:

package base;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/hibernate-beans.xml")
@Transactional
public abstract class SpringTestCase {}

وهنا الخطأ:

حدث بسبب:java.lang.IllegalStateException:يتنافس اسم الفاصوليا المحددة بالتعليقات "userdao" لفئة الفول [jpadao.userdao] مع تعريف الفاصوليا الحالي غير المتوافق مع نفس الاسم والفئة [jpaadao.userdao

لقد حاولت بالفعل تجاوز التوصيل التلقائي باستخدام المؤهلات، على سبيل المثال:

<bean class="jpaadao.UserDAO">
    <qualifier value="jpaa"/>
</bean>
<bean class="jpadao.UserDAO">
    <qualifier value="jpa"/>
</bean>

وبعد ذلك في الأسلاك testcase مع

@Autowired
@Qualifier("jpa")
private IUserDAO userDAO;

ولكن الخطأ لا يزال قائما.

سؤالين:

  1. كيف يمكن حل هذه المشكلة من خلال التكوين القائم على التعليقات التوضيحية؟
  2. كيف يمكنني إجراء الاختبارات بدون التوصيل التلقائي والشروح؟
هل كانت مفيدة؟

المحلول

أنت تستخدم الفاصوليا دون أسماء بحيث يحاول الربيع التوصل إلى اسم، قد يستند هذا الاسم إلى التعليق التوضيحي الأفنامي الذي يفترض أنه من المفترض أن يكون لديك في صفك، ولكن يمكن أن يكون أيضا النسخة الجملية الخاصة بكاسم الفئة غير المؤهلة للفول الخاص بك (في كلتا الحالتين سوف يتحولون على قدم المساواة وهذا يسبب الربيع إلى الكائن).

أيضا، يبدو أنك تختلط فحص المكونات وتكوين XML بطريقة تبدو غريبة بعض الشيء بالنسبة لي.

هناك العديد من الطرق من هذا، ولكن معظمها نظيف ستستخدم فاصوليا واحدا ينفذ العقد الذي تحاول ملكه ملكه.إذا كنت بحاجة إلى تطبيقات مختلفة، فعليك منحهم أسماء مختلفة وأكثر وصفا:

giveacodicetagpre.

سيعطيك تسجيل أكثر فائدة، حتى لو لم يتم استخدام أسماء الفول أبدا لأنك تعتمد على الأسلاك التلقائية.

نصائح أخرى

  1. افعل ما اقترحه iwein: اسم فئات التنفيذ الخاصة بك بشكل أفضل (على سبيل المثال، HibernateUserdao و JPAUSERDAO)؛أو حدد اسم فاصوليا فريدا عبر التعليق التوضيحي الأفنامي أو Reposisoration على فئات تنفيذ UserDao.
  2. لا يمكنك حاليا تشغيل الاختبارات دون التذوقية.راجع هذه المشكلة جيرا للحصول على التفاصيل: https://jira.springsource.org/browse/spr-6050
  3. التحيات،

    SAM (مؤلف الإطار Testcontext Framework)

    p.s.لا، المشكلة التي تواجهها لا علاقة لها برعام 4524.

يمكنك محاولة إدخال التبعية بالاسم باستخدام ملف @Resource حاشية. ملاحظة.سيتعين عليك إعطاء أسماء (معرفات) للفاصوليا أو استخدام الاسم الافتراضي، وهو اسم الفئة غير المؤهل غير الكبير.

لقد حصلت عليها وتشغيلها الآن!ومع ذلك، لا أصدق أن هذه هي أفضل الممارسات.أنا ببساطة استبعد مسار الووس غير المرغوب فيه عن طريق الكتابة إلى appcontext.xml:

giveacodicetagpre.

أي اقتراحات؟هل يمكن أن تكون هذه المشكلة مرتبطة http://jira.springframework.org/browse/spr-4524 ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top