Есть класс , который выполняет деление столбиком и результат отображает графически выводом в консоль. Как протестировать такой метод?
public class IntegerDivision {
public static void main(String[] args) throws IOException {
IntegerDivision integerDivision = new IntegerDivision();
try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));) {
int dividend = integerDivision.read(reader);
int divider = 0;
int attempNumber = 0;
while (divider == 0) {
if (attempNumber != 0) {
System.out.println("Сan not be divided into zero");
}
divider = integerDivision.read(reader);
}
integerDivision.divide(dividend, divider);
}
}
public void divide(int dividend, int divider) {
int lineCount = 1;
int result = 0;
int dividendRemainder = 0;
int elementCount = 0;
int dividendPart = 0;
int subtractedDigit = 0;
System.out.println("_" + dividend + " | " + divider);
lineCount++;
String dividendString = String.valueOf(dividend);
String[] dividendDigits = dividendString.split("");
while (elementCount < dividendDigits.length) {
if (elementCount == 0) {
dividendPart = Integer.parseInt(dividendDigits[elementCount]);
} else {
dividendPart = Integer.parseInt(String.valueOf(dividendPart) + dividendDigits[elementCount]);
}
if (dividendPart >= divider) {
result = dividendPart / divider;
dividendRemainder = dividendPart % divider;
subtractedDigit = result * divider;
if (lineCount == 2) {
display(dividend, divider, lineCount);
} else {
display(dividendPart, subtractedDigit, lineCount);
}
dividendPart = dividendRemainder;
lineCount++;
elementCount++;
} else {
elementCount++;
}
}
lineCount = 0;
display(dividend, dividendRemainder, lineCount);
}
/* Выводит результат в консоль в виде
78945|4
4 |------
-----|19736
38
36
29
28
14
12
25
24
1*/
public void display(int firstNumber, int secondNumber, int lineNumber) {
...............
System.out.println(stringBuilder.toString());
}
}
public int count(int number) {
........
return numberString.length();
}
public String collect(int symbolsNumber, char symbol) {
........
return string.toString();
}
private int read(BufferedReader reader) throws IOException {
.......
return Integer.parseInt(readedLine);
}
}
Переменная out в классе System статичная, поэтому перед запуском теста можно подменить поток вывода в консоль на свой:
protected final ByteArrayOutputStream output;
private PrintStream old;
@Before
public void setUpStreams() {
old = System.out;
output = new ByteArrayOutputStream();
System.setOut(new PrintStream(output));
}
@After
public void cleanUpStreams() {
System.setOut(old);
}
@Test
public void testString() {
IntegerDivision division = new IntegerDivision();
division.divide(17.0, 23.0);
String template = "ожидаемый вывод в консоль";
Assert.assertEquals(template, output.toString());
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как сделать в Sketchware так что бы кнопка показывала ,а при повторном скрывала какой-либо контент?