اختبار لإرسال البريد الإلكتروني-دمبستر و غرينميل لا اصطياد أرسلت جافاميل

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

سؤال

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

هذا هو الإعداد البريد جافا لدينا:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.somewhere.com" />
    <property name="port" value="25" />
    <property name="username" value="theUserName" />
    <property name="password" value="thePassword" />

    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
        </props>
    </property>
</bean>

لدينا فئة الارسال فقط يضخ جافامايلر:

@Component
public class OurMailer {

    @Inject
    private MailSender mailSender;

    public void sendMail(String from, String to, String subject, String msg) {

        SimpleMailMessage message = new SimpleMailMessage();

        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(msg);
        mailSender.send(message);
    }

الاختبار هو مستقيم جدا إلى الأمام كما أنها تظهر على صفحتهم:

@Inject
private OurMailer ourMailer;

@Test
public void ourMailer_should_send_mail() {
    SimpleSmtpServer server = SimpleSmtpServer.start();
    ourMailer.sendMail(FROM_EMAIL, TO_EMAIL, SUBJECT, MESSAGE);
    server.stop();
    Assert.assertTrue(server.getReceivedEmailSize() == 1);
}

كما قلت ، يتم إرسال البريد ولكن فشل التأكيد.

أي أفكار?

راجع للشغل:حاولت أيضا جرينمايل ولكن مع نفس النتيجة:

مخضرم مختلفة قليلا:

    <dependency>
        <groupId>com.icegreen</groupId>
        <artifactId>greenmail</artifactId>
        <version>1.3.1b</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

الاختبار

    GreenMail greenMail = new GreenMail(); //uses test ports by default
    greenMail.start();
    // send mail
    Assert.assertEquals("subject", greenMail.getReceivedMessages()[0].getSubject());
    greenMail.stop();
هل كانت مفيدة؟

المحلول

فشل الاختبار لأن التكوين يقول " إرسال البريد إلى ملقم سمتب smtp.somewhere.com واضاف " لكن كنت ترغب في إرسالها إلى SimpleSmtpServer الذي يعمل على localhost

استخدام خاصية النظام ل host المعلمة من mailSender الفول وتعيينه على localhost عند تشغيل اختبار.

ومع ذلك ، أقترح تقسيم الاختبار إلى قسمين.يجب أن يتأكد الاختبار الأول فقط من أن الطريقة تسمى بالمعلمات الصحيحة.وبهذه الطريقة سوف تعرف أن رمز يحاول إرسال رسائل في الوقت الصحيح;هناك نقطة صغيرة في اختبار مصادقة سمتب ، خادم البريد الخاص بك ، والبنية التحتية للبريد والشبكة في اختبار وحدة - يتم اختبار كل هذه من قبل الشركات المصنعة الخاصة بها.

يجب أن يختبر الاختبار الثاني الطريقة فقط sendMail() الطريقة.ضع هذا الاختبار في مجموعة اختبار يمكن تشغيلها يدويا.ما تريد معرفته هنا هو ما إذا كنت قد قمت بإعداد واستخدام ملف MailSender أبي.إلا إذا قمت بتغيير التعليمات البرمجية في sendMail() الطريقة ، ليس عليك تشغيل هذا الاختبار على الإطلاق.

سيؤدي ذلك إلى تسريع اختبار الوحدة والتخلص من العديد من التبعيات غير الضرورية التي يمكن أن تتسبب في فشل الاختبار على الرغم من أن التعليمات البرمجية تعمل بشكل صحيح.

نصائح أخرى

ملاحظة: يبدو أن هناك إصدارات أحدث من Dumbster (غير متوفر من المصدر الأصلي) والتي قد تكون ثابتة أخطاء Hang التي واجهتها:

sourceforge.net/p/dumbster/patches/9 /

https://github.com/rjo1970/dumbster

git-wip-us.apache.org/repos/asf؟p=logging-log4j2.git؛a=commit ؛h=b0f7be4b0666dca22205e6df5c737467df5c7374677daa416e

وظهر الأخضر يقيم هنا هذه الأيام:

https://github.com/greenmail-mail-test/greenmail / ص>

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