+ Start a Discussion
KapavariVenkatramanaKapavariVenkatramana 

how to write 100% test class for Calculator CLass. Unit Testing on the Lightning Platform Write Negative Tests

how to write 100% test class for Calculator CLass. Unit Testing on the Lightning Platform  Write Negative Tests
Best Answer chosen by KapavariVenkatramana
Maharajan CMaharajan C
Hi,

Please use the below Apex Class and Test Class:

Apex Class:

public class Calculator {
public class CalculatorException extends Exception{}

public static Integer addition(Integer a, Integer b){
return a + b;
}

public static Integer subtraction(Integer a, Integer b){
return a - b;
}

public static Integer multiply(Integer a, Integer b){
if(b==0 || a==0){
throw new CalculatorException('It doesn\'t make sense to multiply by zero');
}
return a * b;
}

public static Decimal divide(Integer numerator, Integer denominator){
if(denominator == 0){
throw new CalculatorException('you still can\'t divide by zero');
}
if(numerator < 0 || denominator < 0)
throw new CalculatorException('negative value(s) not allowed.');

Decimal returnValue = numerator / denominator;

return returnValue;
}
}

======================

Test Class:

@isTest
   public class Calculator_Tests {

@isTest
 public static void addition() {
    Calculator.addition(1, 0);
   }
@isTest
  public static void subtraction() {
    Calculator.subtraction(1, 0);
   }

@isTest
 public static void divide_throws_exception_for_division_by_zero() {
 Boolean caught = false;
 try {
    Calculator.divide(1, 0);
  } catch (Calculator.CalculatorException e) {
    System.assertEquals('you still can\'t divide by zero', e.getMessage(), 
  'caught the right exception');
    caught = true;
   }
   System.assert(caught, 'threw expected exception');
   }

  @isTest
 public static void divide_throws_exception_for_division_by_two() {
 Boolean caught = true;
 try {
    Calculator.divide(1, 2);
 } catch (Calculator.CalculatorException e) {
    System.assertEquals('you still can\'t divide by zero', e.getMessage(), 
  'caught the right exception');
    caught = true;
   }
   System.assert(caught, 'threw expected exception');
 }


@isTest
public static void multiply_by_one() {
  Boolean caught = false;
  try {
    Calculator.multiply(1, 0);
    } catch (Calculator.CalculatorException e) {
    System.assertEquals('It doesn\'t make sense to multiply by zero', 
    e.getMessage(), 'caught the right exception');
     caught = true;
    }
    System.assert(caught, 'threw expected exception');
  }

@isTest
 public static void multiply_by_two() {
  Boolean caught = true;
  try {
     Calculator.multiply(1, 2);
   } catch (Calculator.CalculatorException e) {
    System.assertEquals('It doesn\'t make sense to multiply by zero', 
  e.getMessage(), 'caught the right exception');
    caught = true;
   }
   System.assert(caught, 'threw expected exception');
}   
       
       @isTest
    public static void divide_throws_exception_for_negative_number() {
        Boolean caught = true;
        try {
            Calculator.divide(-1, 2);
        } catch (Calculator.CalculatorException e) {
            System.assertEquals('negative value(s) not allowed.',e.getMessage());
            caught = true;
        }
        System.assert(caught, 'threw expected exception');
    }
}


Thanks,
Maharajan.C

All Answers

Maharajan CMaharajan C
Hi,

Please use the below Apex Class and Test Class:

Apex Class:

public class Calculator {
public class CalculatorException extends Exception{}

public static Integer addition(Integer a, Integer b){
return a + b;
}

public static Integer subtraction(Integer a, Integer b){
return a - b;
}

public static Integer multiply(Integer a, Integer b){
if(b==0 || a==0){
throw new CalculatorException('It doesn\'t make sense to multiply by zero');
}
return a * b;
}

public static Decimal divide(Integer numerator, Integer denominator){
if(denominator == 0){
throw new CalculatorException('you still can\'t divide by zero');
}
if(numerator < 0 || denominator < 0)
throw new CalculatorException('negative value(s) not allowed.');

Decimal returnValue = numerator / denominator;

return returnValue;
}
}

======================

Test Class:

@isTest
   public class Calculator_Tests {

@isTest
 public static void addition() {
    Calculator.addition(1, 0);
   }
@isTest
  public static void subtraction() {
    Calculator.subtraction(1, 0);
   }

@isTest
 public static void divide_throws_exception_for_division_by_zero() {
 Boolean caught = false;
 try {
    Calculator.divide(1, 0);
  } catch (Calculator.CalculatorException e) {
    System.assertEquals('you still can\'t divide by zero', e.getMessage(), 
  'caught the right exception');
    caught = true;
   }
   System.assert(caught, 'threw expected exception');
   }

  @isTest
 public static void divide_throws_exception_for_division_by_two() {
 Boolean caught = true;
 try {
    Calculator.divide(1, 2);
 } catch (Calculator.CalculatorException e) {
    System.assertEquals('you still can\'t divide by zero', e.getMessage(), 
  'caught the right exception');
    caught = true;
   }
   System.assert(caught, 'threw expected exception');
 }


@isTest
public static void multiply_by_one() {
  Boolean caught = false;
  try {
    Calculator.multiply(1, 0);
    } catch (Calculator.CalculatorException e) {
    System.assertEquals('It doesn\'t make sense to multiply by zero', 
    e.getMessage(), 'caught the right exception');
     caught = true;
    }
    System.assert(caught, 'threw expected exception');
  }

@isTest
 public static void multiply_by_two() {
  Boolean caught = true;
  try {
     Calculator.multiply(1, 2);
   } catch (Calculator.CalculatorException e) {
    System.assertEquals('It doesn\'t make sense to multiply by zero', 
  e.getMessage(), 'caught the right exception');
    caught = true;
   }
   System.assert(caught, 'threw expected exception');
}   
       
       @isTest
    public static void divide_throws_exception_for_negative_number() {
        Boolean caught = true;
        try {
            Calculator.divide(-1, 2);
        } catch (Calculator.CalculatorException e) {
            System.assertEquals('negative value(s) not allowed.',e.getMessage());
            caught = true;
        }
        System.assert(caught, 'threw expected exception');
    }
}


Thanks,
Maharajan.C
This was selected as the best answer
KapavariVenkatramanaKapavariVenkatramana
Thanks,
Maharajan.C

Hatsoff to Your more than 4 hours Sturggled. and You gave the Solution.Thanks a lot.