JUnit প্রতিবেদনে অ্যারের সাথে তুলনা করা, সংক্ষিপ্ত অন্তর্নির্মিত ভাবে?


159

JUnit এ দুটি টাইপযুক্ত অ্যারেগুলির সমান মূল্য নির্ধারণের জন্য কি সংক্ষিপ্ত, অন্তর্নির্মিত উপায় আছে? ডিফল্টরূপে (কমপক্ষে JUnit 4 এ) এটি অ্যারে অবজেক্টের সাথে তুলনা করে একটি উদাহরণ বলে মনে হচ্ছে।

EG, কাজ করে না:

int[] expectedResult = new int[] { 116800,  116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);

অবশ্যই, আমি নিজে এটি দিয়ে করতে পারি:

assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
    assertEquals("mismatch at " + i, expectedResult[i], result[i]);

.. তবে এর চেয়ে ভাল উপায় আর কি আছে?

উত্তর:


297

Org. junit.Assert এর পদ্ধতিটি ব্যবহার করুন assertArrayEquals:

import org.junit.Assert;
...

Assert.assertArrayEquals( expectedResult, result );

যদি এই পদ্ধতিটি উপলভ্য না হয় তবে আপনি দুর্ঘটনাক্রমে এ্যাসেট ক্লাসটি আমদানি করে থাকতে পারেন junit.framework


এটি বিভিন্ন দৈর্ঘ্যের জন্য ব্যর্থ হয় তবে আপনি যা পান তা সবই java.lang.AssertionError: array lengths differed, expected.length=6 actual.length=7। বেশিরভাগ JUnit ব্যর্থতা বার্তা হিসাবে এটি তেমন সহায়ক নয় ... আমি কিছু
দৃ as়

1
@ ব্যবহারকারী 1075613 - আমি এটি সহায়ক বলে মনে করি। আমরা জোর দিয়েছিলাম যে অ্যারেগুলি সমান ছিল, তারা নেই, এবং কেন আমাদের একটি ইঙ্গিত দেওয়া হয়েছে। সেখান থেকে, আমরা একটি ব্রেকপয়েন্ট স্থাপন করতে পারি এবং অ্যারেগুলি বিস্তারিতভাবে পরীক্ষা করতে পারি।
অ্যান্ডি থমাস 0

1
ঠিক আছে, এটি - কিছুটা - সহায়ক। তবে আপনি যেমনটি উল্লেখ করেছেন, তাত্ক্ষণিক আপনার কাছে এই বার্তাটি রয়েছে আপনি নিজেকে জিজ্ঞাসা করছেন "কেন এটি একই দৈর্ঘ্য নয়?" সুতরাং আপনি বিষয়বস্তু পরীক্ষা করতে চান। একটি ভাল ত্রুটি বার্তা সরাসরি এটি বলতে পারে যখন একটি ডিবাগারের সাথে সময় হারাতে কেন? (নিশ্চিত যে আপনার এখনও কখনও কখনও ডিবাগার প্রয়োজন তবে বেশিরভাগ সময় আপনি করেন না)
ব্যবহারকারী 1075613

আপনি JUnit এর ইস্যু ট্র্যাকিং সিস্টেমে সমস্যাগুলি জমা দিতে পারেন । মনে রাখবেন, যদিও, এই 1) দ্রুত ব্যর্থ হওয়া, ও (1) এ, একটি সুবিধা হতে পারে, ২) দৃ failure় ব্যর্থতা আউটপুট ও (এন) হওয়া উচিত নয়। JUnit ইস্যু ট্র্যাকিং সিস্টেম আরও আলোচনার জন্য একটি ভাল ফোরাম।
অ্যান্ডি টমাস 16

1
@ আন্ডারো - Assert.assertFalse( Arrays.equals( expectedResult, result ))
অ্যান্ডি টমাস

35

আপনি ব্যবহার করতে পারেন Arrays.equals(..):

assertTrue(Arrays.equals(expectedResult, result));

14
এটি সম্পর্কে কী দুর্গন্ধ হয় তা হ'ল এটি ব্যর্থ হলে কী ভুল হয়েছে সে সম্পর্কে আপনি কোনও তথ্য পান না।
mBria

8
আপনি যখন কোনও পুরানো জুনিট সংস্করণে আছেন (অ্যান্ড্রয়েডের মতো)
জিতরেক্স

2
কোন বাইটস মেলে না তা আপনি যদি দেখতে চান তবে আপনি সেগুলিকে স্ট্রিংয়ে রূপান্তর করতে পারেন: assertEquals (Arrays.toString (প্রত্যাশিত ফলাফল), অ্যারেস.টো স্ট্রিং (ফলাফল));
এরদেমে

17

আমি অ্যারেগুলিকে স্ট্রিংয়ে রূপান্তর করতে পছন্দ করি:

Assert.assertEquals(
                Arrays.toString(values),
                Arrays.toString(new int[] { 7, 8, 9, 3 }));

এইভাবে আমি স্পষ্ট দেখতে পাচ্ছি যেখানে ভুল মান আছে। এটি কেবলমাত্র ছোট আকারের অ্যারেগুলির জন্য কার্যকরভাবে কাজ করে, তবে আমি খুব কমই আমার ইউনিট পরীক্ষায় 7 টিরও বেশি আইটেম সহ অ্যারে ব্যবহার করি।

এই পদ্ধতিটি আদিম ধরণের এবং অন্যান্য ধরণের জন্য কাজ করে যখন ওভারলোড toStringসমস্ত প্রয়োজনীয় তথ্য ফেরত দেয়।


11

1
হুঁ, আমি আমার 'জুনিট.ফ্রেমওয়ার্ক.আসর্ট'-তে কোনও' অ্যাসেটআরএকুইলস 'দেখছি না?
mBria

৪.৮.১ হ'ল আমার কাছে যা আছে এবং এটি মাভেনের মাধ্যমে সর্বশেষতম উপলব্ধ বলে মনে হয় ( গ্রেপকোড . com/… )। এটি কি কেবল 4.8.2 বা 4.9 এ রয়েছে?
mBria

4

জুনিট 4 এবং হ্যামক্রেস্ট ব্যবহার করে আপনি অ্যারের তুলনা করার একটি সংক্ষিপ্ত পদ্ধতি পাবেন। এটি ব্যর্থতার সন্ধানে কোথায় ত্রুটি রয়েছে তার বিশদও দেয়।

import static org.junit.Assert.*
import static org.hamcrest.CoreMatchers.*;

//...

assertThat(result, is(new int[] {56, 100, 2000}));

ব্যর্থতা ট্রেস আউটপুট:

java.lang.AssertionError: 
   Expected: is [<56>, <100>, <2000>]
   but: was [<55>, <100>, <2000>]

2

আমি জানি প্রশ্নটি JUnit4 এর জন্য, তবে আপনি যদি JUnit3 এ আটকে যান তবে আপনি এর মতো একটি সংক্ষিপ্ত ইউটিলিটি ফাংশন তৈরি করতে পারেন:

private void assertArrayEquals(Object[] esperado, Object[] real) {
    assertEquals(Arrays.asList(esperado), Arrays.asList(real));     
}

JUnit3 এ, সরাসরি অ্যারের সাথে তুলনা করার চেয়ে এটি আরও ভাল, যেহেতু এটিতে সঠিকভাবে উপাদানগুলি ভিন্ন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.