سؤال

لدي بعض الاختبارات تعمل بشكل جيد.ثم انتقلت إلى مجموعة مختلفة ، وأنا الآن الحصول على أخطاء.هنا هو رمز:

import static org.junit.Assert.*;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.jgrapht.Graphs;
import org.jgrapht.WeightedGraph;
import org.jgrapht.graph.DefaultWeightedEdge;
import org.jgrapht.graph.SimpleWeightedGraph;
import org.junit.*; 

@Test
    public void testEccentricity() {
        WeightedGraph<String, DefaultWeightedEdge> g = generateSimpleCaseGraph();
        Map<String, Double> eccen = JGraphtUtilities.eccentricities(g);

        assertEquals(70, eccen.get("alpha"));
        assertEquals(80, eccen.get("l"));
        assertEquals(130, eccen.get("l-0"));
        assertEquals(100, eccen.get("l-1"));
        assertEquals(90, eccen.get("r"));
        assertEquals(120, eccen.get("r-0"));
        assertEquals(130, eccen.get("r-1"));
    }

رسالة الخطأ هذه:

طريقة assertEquals(كائن كائن) هو غامض نوع JGraphtUtilitiesTest

كيف يمكنني إصلاح هذا ؟ لماذا هذه المشكلة تحدث كما انتقلت الطبقة حزمة مختلفة ؟

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

المحلول

طريقة assertEquals(كائن كائن) هو غامض نوع ...

ما هذا الخطأ يعني أنك تمرير double و Double في أسلوب يحتوي على اثنين من توقيعات مختلفة: assertEquals(Object, Object) و assertEquals(double, double) وكلاهما يمكن أن يسمى بفضل autoboxing.

لتجنب الغموض ، تأكد من أنه يمكنك إما الاتصال assertEquals(Object, Object) (عن طريق تمرير اثنين الزوجي) أو assertEquals(double, double) (عن طريق تمرير اثنين الزوجي).

لذا في حالتك يجب عليك استخدام:

assertEquals(Double.valueOf(70), eccen.get("alpha"));

أو:

assertEquals(70.0d, eccen.get("alpha").doubleValue());

نصائح أخرى

يمكنك استخدام الأسلوب

assertEquals(double expected, double actual, double delta)

والتي سوف تأخذ في الاعتبار خطأ التقريب التي هي hinerent إلى النقطة العائمة (انظر هذا المنصب على سبيل المثال).يمكنك كتابة

assertEquals(70, eccen.get("alpha"), 0.0001);

هذا يعني أنه طالما اثنين من القيم تختلف أقل من 0.0001 فهي تعتبر أن يساوي.هذا وقد اثنين من المزايا:

  • يقارن النقطة العائمة القيم التي من المفترض أن
  • لا تحتاج إلى المدلى بها ، كما الثلاث حجة يؤكدون فقط applyes على الزوجي ، وليس إلى كائنات العامة

أبسط حل هذه المشكلة هو مجرد يلقي المعلمة الثانية إلى البدائية:

assertEquals(70, (double)eccen.get("alpha"));

غموض إزالتها.

وهذا يسري على أي عدد الفئات الفرعية ، على سبيل المثال:

assertEquals(70, (int)new Integer(70));

حل غموض أيضا.

ومع ذلك ، assertEquals(مزدوجة مزدوجة) هو مستنكر حتى الآن ولأسباب وجيهة ، لذلك أنا أشجعكم على استخدام الأسلوب مع دلتا كما اقترح آخرون بالفعل.

من أسباب جيدة أعني أنه نظرا الداخلية تمثيل مزدوج الأرقام اثنين على ما يبدو تساوي ضعف الأرقام يمكن أن تختلف في له جزء صغير جدا و لن اجتياز اختبار, ولكن هذا لا يعني أن هناك أي شيء خاطئ مع التعليمات البرمجية الخاصة بك.

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