Showing posts with label mockito. Show all posts
Showing posts with label mockito. Show all posts

Friday, September 21, 2012

Unit Testing Java code using mock objects (mockito)

Let's start with an example. We have a Conversion class to convert temperature from Fahrenheit to Celcius.

Following is the Java code :
class Fahrenheit {
 float f=0;
 public Fahrenheit(float f)
 {
  this.f=f;
 }
 public float getFahrenheit()
 {
  return f;
 }
 public void setFahrenheit(float f)
 {
  this.f=f;
 }
}

class Celcius {
 float celcius=0;
 public Celcius(Float c)
 {
  System.out.println("Celcius="+c);
  celcius=c;
 }
 public Float getCelcius()
 {
  return celcius;
 }

 public void setCelcius(Float c)
 {
  System.out.println("Celcius="+c);
  celcius=c;
 }
}

public class Convert {
 
 private float convertToFahrenheit(Celcius c)
 {
  return (float) ((c.getCelcius()*1.8)+32);
 }
 private float converToCelcius(Fahrenheit f)
 {

  return ((f.getFahrenheit()-32)*5/9);
 }

 public float convert(Fahrenheit f, Celcius c)
 {
  if(f!=null)
   return converToCelcius(f);
  else
   return convertToFahrenheit(c);
 }

}

1.Create Mock Objects
Object obj=mock(SomeclassName.class)

2. Setup return values on this object
when(obj.somemethod(param)).thenReturn(100);

3. Call a method under test
obj.aMethod()

4. Verify if a particular method is called and returns a certain value
verify(obj).bMethod(abc,anyObject());

For our example above, the test code looks like below

 @Test
 public void test() {

  Convert conversion = mock(Convert.class);
  Celcius celcius=mock(Celcius.class);
  Fahrenheit fahrenheit=mock(Fahrenheit.class);
  when(celcius.getCelcius()).thenReturn((float) 20.0);


  float val=conversion.convert(fahrenheit,celcius);

  verify(conversion).convertToFahrenheit(celcius);
 }