Maven (Surefire): نسخ موارد اختبار من SRC/Test/Java
-
26-09-2019 - |
سؤال
المكون الإضافي المؤكد (اختبار) مافنmvn test-compile
نسخ الملفات في src/test/resources
ل target/test-classes
. يجمع .java
في src/test/java
, ونسخ التجميع .class
الملفات إلى target/test-classes
.
لكنه لا ينسخ الموارد من src/test/java
, ، وأكثر ملاءمة أن تكون قادرًا على وضع موارد الاختبار في نفس الدليل مثل .java
الفصول الدراسية التي هي موارد لها ، من في التسلسل الهرمي الموازي في src/test/resources
.
هل من الممكن الحصول على Maven لنسخ الموارد من src/test/java
?
المحلول
يتم نسخ المورد كله بواسطة Maven-Resource-Plugin ، وإذا قرأت المستند منه ، فسترى كيفية إضافة نسخ للموارد من SRC/Test/Java.
يرى http://maven.apache.org/plugins/maven-resources-plugin/testresources-mojo.html لهدف اختبار الموارد ، والذي يتم تضمينه في دورة الحياة الافتراضية.
ثم انظر http://maven.apache.org/pom.html, وابحث عن <testResources>
.
نصائح أخرى
أعطى bmargulies الجواب, ، ولكن اسمحوا لي أن ملء بعض التفاصيل.
<testresources>
يمكن إضافتها إلى <build>
عقدة POM للمشروع ، مثل هذا:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
</testResources>
أن ينسخ كل شيء في src/test/java
- بما في ذلك .java
رمز المصدر ، الذي لا نريده.
كما أنه (كما ألمح bmargulies فقط) <testResources>
الإعداد في POM الأصل القياسية التي يرثها جميع POM الأخرى (ما لم يتم تغيير هذا الميراث). نسخ الوالد القياسية src/test/resources
, ، لذلك من خلال تجاوز ذلك ، لا نحصل على نسخ كالمعتاد ، وهو ما لا نريده. (على وجه الخصوص ، السبب الكامل للقيام بذلك هو استخدام الوحدة ، التي تريد unitils.properties
تم نسخ ملف - وهذا (بالنسبة لي ، على أي حال) في src/test/resources
.
لذلك نحن نعيد إضافة src/test/resources
:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
أن النسخ بالترتيب المدرج ، بحيث بالنسبة للملفات الموجودة في كليهما /src/test/java
(والمدافع الفرعي) وفي /src/test/resources
(والمدافع الفرعي) ، src/test/resources
الإصدار هو الذي ينتهي به المطاف test-classes
.
الآن نحن فقط بحاجة إلى ليس انسخ ال .java
الملفات:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
الطريقة الوحيدة التي نجحت بها عندما أضع تكوين الاختبار الخاص بي src/test/resources
مجلد (التناظرية من src/test/java
لملفات المصدر). يتم نسخ الملفات من هذا المجلد إلى target/test-classes
المجلد الموجود على classpath أثناء تنفيذ الاختبارات. لا أعرف لماذا ، لكن التكوين التالي لم ينجح بالنسبة لي:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
هل من الممكن الحصول على Maven لنسخ الموارد من SRC/Test/Java؟
نعم ، يتم تحقيق هذا بسهولة مع antrun البرنامج المساعد.