+ Start a Discussion
MedhanieHabteMedhanieHabte 

Getting to 100 percent code coverage on my trailhead module “Write Negative Tests Unit”

I seem to be stuck on this trailhead module or write negative tests unit, while I have 93 percent code coverage, I can't seem to get the code coverage to hit 100 percent at the "returnValue" piece doesn't seem to hit.
My code is as follows.

Calculator 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');
   }
 Decimal returnValue = numerator / denominator;
  if(returnValue < 0){
    throw new CalculatorException('Division returned a negative value.' + 
 returnValue);
 }
   return returnValue;
  }


 }

And my test class as follows
 
@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');
}   
}

 
Best Answer chosen by MedhanieHabte
Abdul KhatriAbdul Khatri
How come a division returned a negative value with positive numbers? I don't think that is the right Scenario. 

Infact you can change that not accepting the negative value like this 
 
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;
    }

and add another test method
@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');
    }

I hope this will help.​

All Answers

Abdul KhatriAbdul Khatri
How come a division returned a negative value with positive numbers? I don't think that is the right Scenario. 

Infact you can change that not accepting the negative value like this 
 
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;
    }

and add another test method
@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');
    }

I hope this will help.​
This was selected as the best answer
KapavariVenkatramanaKapavariVenkatramana
@Abdul Khatri 

Now We are getting 93 % Code Coverage Only...Is there 100% Code coverage 
Diksha RahangdaleDiksha Rahangdale
Please check the below code for 100% code coverage. I completed my challenge with this code and got 500 points...

 @isTest static void testdivide_WithNegativevalue()
    {
      
        Boolean caught = true;
        try{
          Calculator.divide(-4,2);
        }
        catch(Calculator.CalculatorException e)
        {
            //Always write correct assertion
            System.assertEquals('Division returned a negative value.', e.getMessage());
            caught = true;
                
        }
        system.assert(caught,'threw expected exception');
        
    }
    
I hope this will help you...
Aditya Sharma 114Aditya Sharma 114
Thanks @Abdul ... Worked for me as well.
Bhagwan DasBhagwan Das
Thank for Giving me This Chance.
IPL Match Prediction (http://iplprediction2020x.in/)
Bruno Araujo 2Bruno Araujo 2
Seems fair. You should go here (https://essaydragon.com/blog/how-to-write-hook-for-your-essay) for more code improvements.
Jim KyriacouJim Kyriacou

Just completed the trailhead and thanks to the contributors, as the trailhead wasnt very good at explaining the approach.
You need to get the detail exact, so

if passing Calculator.divide(-2,2);

System.assertEquals('Division returned a negative value.-1', e.getMessage(), 
  'caught the right exception');

if passing Calculator.divide(-4,2);

System.assertEquals('Division returned a negative value.-2', e.getMessage(), 
  'caught the right exception');

 

IPL PredictionIPL Prediction
Thank for Giving me This Chance.
IPL Match Prediction (http://www.iplmatchpredictionastrology.com/)
ipl prediction 9ipl prediction 9
Thanks for sharing this. 
Let's know who won in IPL today (https://www.iplprediction2020.in/)
ipl prediction 9ipl prediction 9
Thanks for this sharing...
IPL Astrology(https://www.todayiplmatchprediction2020.in/)
TonystkTonystk
MPL Mobile Premier League Gaming, MPL Pro Apk Download (https://mplproapp.in/download-mpl-apk-for-android/), MPL App Latest Version Download Apk, MPL Referral Code (https://mplproapp.in/mpl-referral-code/), Refer Code, Invite Code, MOD Apk, Hacked Apk, Free Cash Bonus, Winning Cash, MPL Application Tips And Tricks, Unlimited Tokens, Fantasy Games, MPL Customer Care Number, Add Money Offers, Refer And Earn Unlimited Paytm Cash, Withdraw, Redeem 2021