2013-01-03 15 views
5

पर तुलनाकर्ता का परीक्षण कैसे करें मुझे इस विधि का परीक्षण करने की आवश्यकता है - compare()। क्या आपको सलाह मिल सकती है? मैं यह कैसे कर सकता हूं (सभी भाग अगर, अन्यथा, अगर, तो)।जूनिट टेस्ट

public class AbsFigure { 

class AreaCompare implements Comparator<FigureGeneral> { 

    @Override 
    public int compare(FigureGeneral oneFigure, FigureGeneral twoFigure) { 
     double firstValue = oneFigure.area(); 
     double secondValue = twoFigure.area(); 
     int result = 0; 

     if (firstValue > secondValue) 
      result = 1; 
     else if (firstValue < secondValue) 
      result = -1; 
     else 
      result = 0; 

     return result; 
    } 
} 

इस recomendations - हम अगले तस्वीर (तुम लोग एक बहुत धन्यवाद!):

public AreaCompare areaCompare = new AreaCompare(); 

@Test 
public void testEqual() { 
    FigureGeneral oneFigure = new Rectangle(2.0, 2.0, "triangle"); 
    FigureGeneral twoFigure = new Rectangle(2.0, 2.0, "rectangle"); 
     int result = areaCompare.compare(oneFigure, twoFigure); 
     assertTrue("expected to be equal", result == 0); 
} 

@Test 
public void testGreaterThan() { 
    FigureGeneral oneFigure = new Triangle(2.0, 2.0, "triangle"); 
    FigureGeneral twoFigure = new Rectangle(1.0, 1.0, "rectangle"); 
     int result = areaCompare.compare(oneFigure, twoFigure); 
     assertTrue("expected to be greater than", result >= 1); 
} 

@Test 
public void testLessThan() { 
    FigureGeneral oneFigure = new Rectangle(1.0, 1.0, "rectangle"); 
    FigureGeneral twoFigure = new Triangle(2.0, 2.0, "triangle"); 
     int result = areaCompare.compare(oneFigure, twoFigure); 
     assertTrue("expected to be less than", result <= -1); 

सभी अब सामान्य परीक्षण है।

उत्तर

12

बस अपने तुलनित्र वर्ग का दृष्टांत और वस्तुओं में पारित:

public class Test extends TestCase { 
    class AreaCompare implements Comparator<FigureGeneral> { 

     @Override 
     public int compare(FigureGeneral oneFigure, FigureGeneral twoFigure) { 
      double firstValue = oneFigure.area(); 
      double secondValue = twoFigure.area(); 
      int result = 0; 

      if (firstValue > secondValue) { 
       result = 1; 
      } else if (firstValue < secondValue) { 
       result = -1; 
      } else { 
       result = 0; 
      } 

      return result; 
     } 
    } 

    private final AreaCompare areaCompare = new AreaCompare(); 

    @Test 
    public void testEqual() { 
     FigureGeneral oneFigure = new FigureGeneral(); 
     FigureGeneral twoFigure = new FigureGeneral(); 
     int result = areaCompare.compare(oneFigure, twoFigure); 
     assertTrue("expected to be equal", result == 0); 
    } 

    @Test 
    public void testGreaterThan() { 
     FigureGeneral oneFigure = new FigureGeneral(); 
     FigureGeneral twoFigure = new FigureGeneral(); 
     int result = areaCompare.compare(oneFigure, twoFigure); 
     assertTrue("expected to be greater than", result >= 1); 
    } 

    @Test 
    public void testLessThan() { 
     FigureGeneral oneFigure = new FigureGeneral(); 
     FigureGeneral twoFigure = new FigureGeneral(); 
     int result = areaCompare.compare(oneFigure, twoFigure); 
     assertTrue("expected to be less than", result <= -1); 
    } 
} 
+0

ध्यान दें कि एक तुलनित्र को अधिक मूल्यों के लिए बिल्कुल ठीक या बिल्कुल 1 के लिए वापस करने की आवश्यकता नहीं है। कोई भी नकारात्मक/सकारात्मक संख्या करेगा। – Puce

+0

लेकिन आपको इस विधि को ओवरराइड करने की आवश्यकता है - निजी शून्य assertTrue (स्ट्रिंग संदेश, int परिणामValue, int comparValues) {} –

+0

आप प्रत्येक परीक्षण में एकफिगर और दो फिगर को प्रारंभ कर रहे हैं। इसके परिणामस्वरूप या तो NullPointerException या कम से कम एक परीक्षण विफल हो जाएगा (चित्रा सामान्य के निर्माता के आधार पर)। – Chris311

1

मेरे लिए गुस्से में दिखता है। हो सकता है कि के result

class AreaCompare implements Comparator<FigureGeneral> { 

    @Override 
    public int compare(FigureGeneral oneFigure, FigureGeneral twoFigure) { 
     double firstValue = oneFigure.area(); 
     double secondValue = twoFigure.area(); 
     if (firstValue > secondValue) 
      return 1; 
     else if (firstValue < secondValue) 
      return -1; 
     return 0; 
    } 
} 

लिखें कम से कम परीक्षण का मामला छुटकारा पाने के। प्रत्येक वापसी मूल्य के लिए एक।

compare(a, b) अलग हस्ताक्षर होना चाहिए compare(b, a) से या

compare(a, b) == compare(b, a) == 0

2

मैं हाल ही में एक ऐसी ही आवश्यकता थी और कुछ सहायक के साथ आया था विधियां (अभी तक एपीआई के रूप में प्रकाशित नहीं है)।

https://github.com/SoftSmithy/softsmithy-lib/blob/develop/softsmithy-lib-core/src/test/java/org/softsmithy/lib/util/PositionableComparatorTest.java

+0

यह 'http: // sourceforge.net/p/softsmithy/_list/hg' पर रीडायरेक्ट करता है। क्या आप अभी जवाब देने के लिए अपने कोड को पिछले कर सकते हैं? –

0

एक छोटा सा सलाह के बाद, अच्छा परीक्षण:

public AreaCompare areaCompare = new AreaCompare(); 

@Test 
public void testEqual() { 
    FigureGeneral oneFigure = new Rectangle(2.0, 2.0, "triangle"); 
    FigureGeneral twoFigure = new Rectangle(2.0, 2.0, "rectangle"); 
     int result = areaCompare.compare(oneFigure, twoFigure); 
     assertTrue("expected to be equal", result == 0); 
} 

@Test 
public void testGreaterThan() { 
    FigureGeneral oneFigure = new Triangle(2.0, 2.0, "triangle"); 
    FigureGeneral twoFigure = new Rectangle(1.0, 1.0, "rectangle"); 
     int result = areaCompare.compare(oneFigure, twoFigure); 
     assertTrue("expected to be greater than", result >= 1); 
} 

@Test 
public void testLessThan() { 
    FigureGeneral oneFigure = new Rectangle(1.0, 1.0, "rectangle"); 
    FigureGeneral twoFigure = new Triangle(2.0, 2.0, "triangle"); 
     int result = areaCompare.compare(oneFigure, twoFigure); 
     assertTrue("expected to be less than", result <= -1); 
} 
0

https://github.com/SoftSmithy/softsmithy-lib/blob/develop/softsmithy-lib-core/src/test/java/org/softsmithy/lib/Tests.java

यहाँ एक परीक्षण है, जो इन उपयोगिता तरीकों का उपयोग करता है: यहाँ स्रोत कोड है

अनुबंध के लिए परीक्षण करना बेहतर हो सकता है, न कि -1/0/1 मानों (या अधिक सटीक, किसी भी सकारात्मक/शून्य/नकारात्मक मूल्य) के लिए। यह एक बहुत ही संक्षिप्त तरीके से हैमक्रिस्ट मैचर्स का उपयोग करके किया जा सकता है। निम्न उदाहरण पर विचार करें:

import static org.hamcrest.Matchers.comparesEqualTo; 
import static org.hamcrest.Matchers.greaterThan; 
import static org.hamcrest.Matchers.lessThan; 

public AreaCompare areaCompare = new AreaCompare(); 

@Test 
public void testEqual() { 
    FigureGeneral oneFigure = new Rectangle(2.0, 2.0, "triangle"); 
    FigureGeneral twoFigure = new Rectangle(2.0, 2.0, "rectangle"); 
    assertThat(oneFigre comparesEqualTo(twoFigure)); 
    assertThat(twoFigure, comparesEqualTo(oneFigure)); 
} 

@Test 
public void testGreaterThan() { 
    FigureGeneral oneFigure = new Triangle(2.0, 2.0, "triangle"); 
    FigureGeneral twoFigure = new Rectangle(1.0, 1.0, "rectangle"); 
    assertThat(oneFigure, greaterThan(twoFigure)); 
} 

@Test 
public void testLessThan() { 
    FigureGeneral oneFigure = new Rectangle(1.0, 1.0, "rectangle"); 
    FigureGeneral twoFigure = new Triangle(2.0, 2.0, "triangle"); 
    assertThat(oneFigure, lessThan(twoFigure)); 
} 

इस प्रकार आप जो मूल्य क्या है और परीक्षण के इरादे स्पष्ट कर दूं के लिए खड़ा है याद करने के लिए नहीं है।