Привет, я пытаюсь опробовать тестирование Junit, и я не могу найти способ протестировать другой класс без копирования, вставляя его части. Скажем, я хочу протестировать это:Junit - тестирование другого класса
import java.io.*;
public class Calculator {
public static void main(String[] args) {
String s1 = getInput("Enter a numeric value: ");
String s2 = getInput("Enter a numeric value: ");
String op = getInput("Enter 1=ADD, 2=Subtract, 3=Multiply, 4=Divide ");
int opInt = Integer.parseInt(op);
double result = 0;
switch (opInt) {
case 1:
result = addValues(s1, s2);
break;
case 2:
result = subtractValues(s1, s2);
break;
case 3:
result = multiplyValues(s1, s2);
break;
case 4:
result = divideValues(s1, s2);
break;
default:
System.out.println("You entered an incorrect value");
return;
}
System.out.println("The answer is " + result);
}
private static double divideValues(String s1, String s2) {
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2);
double result = d1/d2;
return result;
}
private static double multiplyValues(String s1, String s2) {
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2);
double result = d1 * d2;
return result;
}
private static double subtractValues(String s1, String s2) {
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2);
double result = d1 - d2;
return result;
}
private static double addValues(String s1, String s2) {
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2);
double result = d1 + d2;
return result;
}
private static String getInput(String prompt) {
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print(prompt);
System.out.flush();
try {
return stdin.readLine();
} catch (Exception e) {
return "error: " + e.getMessage();
}
}
Есть ли способ, который я могу настроить для проверки JUnit для проверки частей этого без копирования и вставки его для каждого теста или изменения оригинального класса. я что-то упустил или это что-то не может сделать?
Вот что я в данный момент:
import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.junit.Test;
public class CalculatorTest {
Calculator mycalculator = new Calculator();
@Test
public void test1() {
mycalculator;
assertEquals(d1 + d2, 20);
}
}
Сделайте биты класса, к которому вы хотите получить доступ извне этого класса, видны - например. удалите 'private' из методов, которые вы хотите протестировать. –
Можете ли вы опубликовать класс тестирования модуля, который вы сделали до сих пор, и указать, какой метод или методы вы хотите проверить? – vikingsteve
В этом классе есть две вещи, которые затрудняют тестирование в JUnit: 1) Это чтение из stdin и запись в stdout. 2) Это все статично. Если вы сделаете его нестатичным, вы можете создать экземпляр класса с потоками ввода/вывода, которые вы контролируете, и сохранить их в переменных-членах. (Конечно, вы все равно можете иметь no-arg ctor, который создает его с помощью System.in и System.out). –