2015-08-22 3 views
-1

Я новичок в java и занимаюсь своим кодированием, как бы написать некоторые тесты Junit для этого кода, не меняя его? Я хотел написать некоторые Junits, чтобы узнать, правильный ли результат. Может ли кто-нибудь представить один такой пример? Любая помощь очень ценится.Как бы вы писали тесты Junit для этого кода?

package returnOnInvestment; 

import java.util.Scanner; 

/** 
    This program compares CD /Investment plans input by the year 
    broken down by the requirements below: 

    This program creates a table of compound interest investment growth over time 
    Broken down by: a) year b) balance at end of year 
    Finance formula of A= P(1+ r/n)^n*t is used: 
    A = Future Value   | P = Initial Investment 
    r = annual interest rate |n = times interest is compounded/year 
    t = years invested 
*/ 

public class BestInvesment 
{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 

     String bestBankName = ""; 
     double bestGrowth = 0; 
     boolean done = false; 

     while(!done) 
     { 
      System.out.print("Plan name (one word, Q to quit): "); 
      String bankName = in.next(); 
      if (bankName.equals("Q")) 
      { 
       done = true; 
      } 
      else 
      { 
       System.out.print("Please enter your principal investment: "); 
       final double PRINCIPAL_INVESTMENT = in.nextDouble(); 
       System.out.print("Please enter the annual interest rate: "); 
       double iRate = in.nextDouble(); 
       System.out.print("Please enter number of times interest is compounded per year: "); 
       final double INCREMENT = 1;//in.nextDouble();  
       System.out.print("Enter number of years: "); 
       int nyears = in.nextInt(); 

       iRate = iRate/100; System.out.println("iRate:" + iRate); 

       //Print the table of balances for each year 

       for (int year = 1; year <= nyears; year++) 
       { 
        double MULTIPLIER = INCREMENT * year; 
        System.out.println("Multiplier: " + MULTIPLIER); // I've included this print statement to show that the multiplier changes with each passing year 
        double interest = 1 + (iRate/INCREMENT); 
        double balance = PRINCIPAL_INVESTMENT; 
        double growth = balance * Math.pow(interest, MULTIPLIER); 
        growth = growth - PRINCIPAL_INVESTMENT;      
        balance = balance + growth;         
        System.out.printf("Year: %2d Interest Earned: $%.2f\t Ending Balance: $%.2f\n", year, growth, balance); 

        if (bestBankName.equals("") || bestGrowth > growth) // || bestBankName > growth 
        { 
         bestBankName = bankName; // bestBankName = bankName 
         bestGrowth = growth; // mostGrow = growth 
        } 
        System.out.println("Earning with this option: " + growth);   
       } 
      } 

     } 
     System.out.println("Best Growth: " + bestBankName); 
     System.out.println("Amount Earned: " + bestGrowth);  
    } 
} 

ответ

2

Как бы то ни было, этот код очень трудно проверить, что является симптомом некоторых дизайнерских запахов.

Одна вещь, чтобы понять, что вы серьезно нарушаете принцип единой ответственности.

Вашего кода, который только один блоб делает следующие вещи:

  • печати материал утешать
  • получают входные данные от пользователя
  • делают некоторые вычисления
  • координирующих все этот

Поскольку это в сфере практики, я бы сильно реорганизовал код на отдельные классы. Те, которые должны быть легко проверяемыми, особенно те, которые делают расчет, поскольку у него будут только некоторые простые методы, в которых вы можете передать некоторые значения в качестве аргументов и проверить результаты.

Для тестирования классов ввода и вывода обратите внимание, что вы можете измените System.in и System.out, чтобы указать на свои собственные реализации, чтобы вы могли создавать те, которые облегчали тестирование. Возможно, вы захотите изучить насмешливую структуру для этого (например, Mockito), но это вполне возможно без такой структуры.

Смежные вопросы