إطار اختبار الربيع ومشكلة التوصيل التلقائي المستندة إلى التعليقات التوضيحية
-
12-09-2020 - |
سؤال
أرغب في استخدام تطبيقين مختلفين لـ 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;
ولكن الخطأ لا يزال قائما.
سؤالين:
- كيف يمكن حل هذه المشكلة من خلال التكوين القائم على التعليقات التوضيحية؟
- كيف يمكنني إجراء الاختبارات بدون التوصيل التلقائي والشروح؟
المحلول
أنت تستخدم الفاصوليا دون أسماء بحيث يحاول الربيع التوصل إلى اسم، قد يستند هذا الاسم إلى التعليق التوضيحي الأفنامي الذي يفترض أنه من المفترض أن يكون لديك في صفك، ولكن يمكن أن يكون أيضا النسخة الجملية الخاصة بكاسم الفئة غير المؤهلة للفول الخاص بك (في كلتا الحالتين سوف يتحولون على قدم المساواة وهذا يسبب الربيع إلى الكائن).
أيضا، يبدو أنك تختلط فحص المكونات وتكوين XML بطريقة تبدو غريبة بعض الشيء بالنسبة لي.
هناك العديد من الطرق من هذا، ولكن معظمها نظيف ستستخدم فاصوليا واحدا ينفذ العقد الذي تحاول ملكه ملكه.إذا كنت بحاجة إلى تطبيقات مختلفة، فعليك منحهم أسماء مختلفة وأكثر وصفا:
giveacodicetagpre.سيعطيك تسجيل أكثر فائدة، حتى لو لم يتم استخدام أسماء الفول أبدا لأنك تعتمد على الأسلاك التلقائية.
نصائح أخرى
- افعل ما اقترحه iwein: اسم فئات التنفيذ الخاصة بك بشكل أفضل (على سبيل المثال، HibernateUserdao و JPAUSERDAO)؛أو حدد اسم فاصوليا فريدا عبر التعليق التوضيحي الأفنامي أو Reposisoration على فئات تنفيذ UserDao.
- لا يمكنك حاليا تشغيل الاختبارات دون التذوقية.راجع هذه المشكلة جيرا للحصول على التفاصيل: https://jira.springsource.org/browse/spr-6050
التحيات،
SAM (مؤلف الإطار Testcontext Framework)
p.s.لا، المشكلة التي تواجهها لا علاقة لها برعام 4524.
يمكنك محاولة إدخال التبعية بالاسم باستخدام ملف @Resource
حاشية. ملاحظة.سيتعين عليك إعطاء أسماء (معرفات) للفاصوليا أو استخدام الاسم الافتراضي، وهو اسم الفئة غير المؤهل غير الكبير.
لقد حصلت عليها وتشغيلها الآن!ومع ذلك، لا أصدق أن هذه هي أفضل الممارسات.أنا ببساطة استبعد مسار الووس غير المرغوب فيه عن طريق الكتابة إلى appcontext.xml:
giveacodicetagpre.أي اقتراحات؟هل يمكن أن تكون هذه المشكلة مرتبطة http://jira.springframework.org/browse/spr-4524 ؟