This week's book giveaway is in the Design and Architecture forum.
We're giving away four copies of Communication Patterns: A Guide for Developers and Architects and have Jacqui Read on-line!
See this thread for details.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Ron McLeod
  • Paul Clapham
  • Devaka Cooray
  • Liutauras Vilda
Sheriffs:
  • Jeanne Boyarsky
  • paul wheaton
  • Henry Wong
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Tim Moores
  • Carey Brown
  • Mikalai Zaikin
Bartenders:
  • Lou Hamers
  • Piet Souris
  • Frits Walraven

Unit Test compareTo / Comparable

 
Ranch Hand
Posts: 15304
6
Mac OS X IntelliJ IDE Chrome
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
This is probably a dumb question but I can't find anything for JUnit or TestNG that allows me to assertCompareble or assertCompareTo or something similar. Furthermore I am not even sure if such things should be tested.

Can someone point me in the right direction?

Thanks.
 
author & internet detective
Posts: 41967
911
Eclipse IDE VI Editor Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Gregg,
I don't follow what you are asking for. The following checks objects are comparable. I suspect you means something else though.

assertEquals("comparable", 0, obj1.compareTo(obj2));
 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Mac OS X IntelliJ IDE Chrome
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Jeanne Boyarsky:
Gregg,
I don't follow what you are asking for. The following checks objects are comparable. I suspect you means something else though.

assertEquals("comparable", 0, obj1.compareTo(obj2));



And that's what I was looking for. Thanks.
 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Mac OS X IntelliJ IDE Chrome
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I was looking at the API. How do you know to put "comparable" in for the message? What are the other message options?
 
Ranch Hand
Posts: 234
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Gregg Bolinger:
I was looking at the API. How do you know to put "comparable" in for the message? What are the other message options?



The message is just a reference that is printed when the test fails. There are no special options and it has nothing to do with the actual test.
Or am I misinterpreting the question?
 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Mac OS X IntelliJ IDE Chrome
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by bart zagers:


The message is just a reference that is printed when the test fails. There are no special options and it has nothing to do with the actual test.
Or am I misinterpreting the question?



Nope, works for me. So I was doing..

Assert.assertTrue(obj1.compareTo(obj2) == 0);

Is there any advantage/disadvantage to this over Jeanne's suggestion?
 
author
Posts: 11962
5
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Gregg Bolinger:
Assert.assertTrue(obj1.compareTo(obj2) == 0);

Is there any advantage/disadvantage to this over Jeanne's suggestion?


Well, when your assertion fails you only hear "AssertionFailedError". When Jeanne's assertion fails she hears "AssertionFailedError: comparable".

Especially if you're using this assertion more than once, I'd recommend considering a "custom" assertion method such as this:
 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Mac OS X IntelliJ IDE Chrome
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks. I'll try that.
 
Jeanne Boyarsky
author & internet detective
Posts: 41967
911
Eclipse IDE VI Editor Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Lasse Koskela:
When Jeanne's assertion fails she hears "AssertionFailedError: comparable".


Also note that "Jeanne's assertion" uses assertEquals() rather than assertTrue(). This means that I get the actual value in the message. For comapreTo, I can see if it is larger or smaller than the expected 0 which gives me an extra clue before I look to see what went wrong.

Lasse's message is certainly even more descriptive.
 
author
Posts: 14112
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Note that the tests suggested so far don't really fully test that compareTo is working as expected - for that you needed to test different scenarios.

Take a look at http://junit-addons.sourceforge.net/junitx/extensions/ComparabilityTestCase.html to simplify that task. (You might also want to take a look at the source code to learn how it's done.)
 
Jeanne Boyarsky
author & internet detective
Posts: 41967
911
Eclipse IDE VI Editor Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Ilja Preuss:
Note that the tests suggested so far don't really fully test that compareTo is working as expected - for that you needed to test different scenarios.


Oh! I thought I wasn't understanding the question. Your explanation of it makes sense as for the real question.
 
No more fooling around. Read this tiny ad:
We need your help - Coderanch server fundraiser
https://coderanch.com/wiki/782867/Coderanch-server-fundraiser
reply
    Bookmark Topic Watch Topic
  • New Topic