سؤال

وأنا على وشك أن أكتب JUnit الاختبارات لXML تحليل فئة Java التي المخرجات مباشرة إلى OutputStream. على سبيل المثال xmlWriter.writeString("foo"); أن تنتج شيئا مثل <aTag>foo</aTag> أن تكون مكتوبة إلى outputstream عقدت داخل المثال XmlWriter. والسؤال هو كيف لاختبار هذا السلوك. حل واحد بالطبع سيكون للسماح للOutputStream يكون FileOutputStream ثم قراءة النتائج من خلال فتح ملف مكتوب، ولكنها ليست أنيقة جدا.

هل كانت مفيدة؟

المحلول

واستخدام ByteArrayOutputStream ومن ثم الحصول على البيانات من أن استخدام toByteArray () . هذا وسوف يتم اختبار <م> كيف فإنه يكتب إلى تيار (بايت واحد في وقت واحد أو كمنطقة عازلة كبير) ولكن عادة يجب أن لا يهمني ذلك على أي حال.

نصائح أخرى

إذا يمكنك تمرير الكاتب إلى XmlWriter، وأود أن تمر عليه StringWriter. يمكنك الاستعلام محتويات StringWriter باستخدام toString() على ذلك.

إذا كان لديك لتمرير OutputStream، يمكنك تمرير ByteArrayOutputStream ويمكنك أيضا الاتصال toString() عليه للحصول على محتوياته كسلسلة.

وبعد ذلك يمكنك رمز شيئا مثل:

public void testSomething()
{
  Writer sw = new StringWriter();
  XmlWriter xw = new XmlWriter(sw);
  ...
  xw.writeString("foo");
  ...
  assertEquals("...<aTag>foo</aTag>...", sw.toString());
}

وانها بسيطة. كما قالJonSkeet:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
// pass the baos to be writed with "value", for this example
byte[] byteArray = baos.toByteArray();
Assert.assertEquals("value", new String(byteArray));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top