Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> junit тесты калькулятора, изучаю тесты .... 
V
    Опции темы
Samotnik
Дата 25.10.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



добрый день помогите плз с тестированием!
Имеется в наличии класс (Калькулятор типа  smile ):
Код

public class CalculateMoj {
    private int indicator;
    private char operation;
    private double memory = 0.0;

    public int getIndicator() {
        return indicator;
    }
    public void setIndicator(int indicator) {
        this.indicator = indicator;
    }

    public void setOperation(char operation) {
        this.operation = operation;
    }

    public double getMemory() {
        return memory;
    }
    public void setMemory(double memory) {
        this.memory = memory;
    }
     public static void main(String[] args) {
        }
}

Пишу к нему тесты:
Код

import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
public class TestClass extends TestCase {
    public TestClass(String testName) {
        super(testName);
    }
      public void testComplexOperation() {
        CalculateMoj calc = new CalculateMoj();
        calc.setIndicator(12);
        calc.setOperation('/');
        calc.setIndicator(3);
        calc.setOperation('=');
        assertEquals("Result of division operation", calc.getIndicator(), 4);
    }
    public void main(String args[]){
    TestRunner runner = new TestRunner();
    TestSuite suite = new TestSuite();
    suite.addTest(new TestClass("testComplexOperation"));
    runner.doRun(suite);
    }
}

Задача: Чтоб тесты прошли, хотя бы этот. Не могу понять чего не так, походу что-то в методе не дописал!!  
Компилятор пишет (в тесте)   ожидается 3, а возвращается 4
PM MAIL   Вверх
Kangaroo
Дата 25.10.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



А где в твоем классе калькулятора считается результат?

И по ДжЮниту:
Код

CalculateMoj calc = new CalculateMoj();
        calc.setIndicator(12);
        calc.setOperation('/');
        calc.setIndicator(3);
        calc.setOperation('=');
assertEquals("Result of division operation", calc.getIndicator(), 4);


Сначала ты устанавливаешь Индикатор, а потом просто его и читаешь.. ?
Может надо читать результат?

И еще - в assertEquals сначала пишется то, что ожидаешь, а потом что получится.
То есть:
Код

assertEquals("Result of division operation",  4, calc.getResult());



--------------------
Lost....
PM MAIL MSN   Вверх
Samotnik
Дата 25.10.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(Kangaroo @  25.10.2007,  12:45 Найти цитируемый пост)
А где в твоем классе калькулятора считается результат?

Новы метод нужно написать кот результат считает?
PM MAIL   Вверх
Kangaroo
Дата 25.10.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Цитата(Samotnik @ 25.10.2007,  12:48)
Цитата(Kangaroo @  25.10.2007,  12:45 Найти цитируемый пост)
А где в твоем классе калькулятора считается результат?

Новы метод нужно написать кот результат считает?

Это было бы логично )

Ты же тестируешь калькулятор. Тебе нужно узнать правильно ли он работает. Ты ему подаешь входные данные 12/3, следовательно должен получить 4 как результат операции.
Вот ты и пишешь:
Код

assertEquals("Result of division operation",  4, calc.getResult());



--------------------
Lost....
PM MAIL MSN   Вверх
Samotnik
Дата 25.10.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(Kangaroo @  25.10.2007,  12:52 Найти цитируемый пост)
Это было бы логично )

А как, я не могу понять! Как мне в новом методе получить результат предыдущего (с числом), далее получить операцию(тоже из метода) и опяит число ....
 smile    smile 
PM MAIL   Вверх
Kangaroo
Дата 25.10.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Так это уже не ДжЮниты, а написание калькулятора.. 
Поищи примеры в интернете, самые просты калькуляторы.

Сам я сейчас на обед убегаю, прийду - может чем помогу.


--------------------
Lost....
PM MAIL MSN   Вверх
Samotnik
Дата 25.10.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



В нете поискал, там калькуляторы другого типа ....  smile 
Пэ.Эс.
Просьба модераторам переименовать название темы, в "Написание калькулятора" А то получается несоответствие,  т.к. с тестами я разобрался,а вот с калькулятором  еще нет!
PM MAIL   Вверх
Orange
Дата 25.10.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

Репутация: 4
Всего: 5



Примеры калькуляторов приводились здесь: http://forum.vingrad.ru/forum/topic-23685/...ator/index.html
( А href тэг не работает тут что-ли?)

Это сообщение отредактировал(а) Orange - 25.10.2007, 13:53
--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
Samotnik
Дата 25.10.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Orange,  так под GUI  я и в нете находил.  ток мне нужно под консоль, и с условием, чтоб тест прошол.  вот этот
Код

 public void testComplexOperation() {
        CalculateMoj calc = new CalculateMoj();
        calc.setIndicator(12);
        calc.setOperation('/');
        calc.setIndicator(3);
        calc.setOperation('=');
        assertEquals("Result of division operation", calc.getIndicator(), 4);
    }

И никаких новых переменных вводить НЕЛЬЗЯ !!
PM MAIL   Вверх
Orange
Дата 25.10.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

Репутация: 4
Всего: 5



Так убери гуёвую состовляющую, просто логику оттуда возьми(посмотри там последний комент)
--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
Samotnik
Дата 25.10.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Orange,  так вся проблема, что мне с ТЕСТАМИ нужно все делать, т.е.
Код

public void testComplexOperation() {
        CalculateMoj calc = new CalculateMoj();
        calc.setIndicator(12);
        calc.setOperation('/');
        calc.setIndicator(3);
        calc.setOperation('=');
        assertEquals("Result of division operation", calc.getIndicator(), 4);
    }

Цитата(Samotnik @  25.10.2007,  13:56 Найти цитируемый пост)
И никаких новых переменных вводить НЕЛЬЗЯ !! 

!!!
Т.е. нельзя вводить новый метод  getResult()  !!!
должно все работать через setIndicator()  и  setOperation()  !!!  а выводиться через  getIndicator()

Это сообщение отредактировал(а) Samotnik - 25.10.2007, 14:22
PM MAIL   Вверх
AlexeyVorotnikov
Дата 25.10.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Так переменные нельзя вводить или методы?


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Samotnik
Дата 25.10.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(AlexeyVorotnikov @  25.10.2007,  14:43 Найти цитируемый пост)
Так переменные нельзя вводить или методы? 

Ничего нельзя вводить!!!  
Кстати я уже сделал!!
Класс  Test 
Код

import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;

public class TestClass extends TestCase {
    public TestClass(String testName) {
        super(testName);
    }

    public void testComplexOperation() {
        CalculateMoj calc = new CalculateMoj();
        calc.setIndicator(12);
        calc.setOperation('+');
        calc.setIndicator(3);
        calc.setOperation('=');
        assertEquals("Result of division operation", 15, calc.getIndicator());
    }

    public void testComplexOperation2() {
        CalculateMoj calc = new CalculateMoj();
        calc.setIndicator(12);
        calc.setOperation('/');
        calc.setIndicator(3);
        calc.setOperation('=');
        assertEquals("Result of division operation", 4, calc.getIndicator());

    }

    public void testComplexOperation5() {
        CalculateMoj calc = new CalculateMoj();
        try {
            calc.setIndicator(12);
            calc.setOperation('/');
            calc.setIndicator(0);
            calc.setOperation('=');
        }
        catch (Exception e) {
            assertEquals(true, true);
        }

    }

    public void testComplexOperation3() {
        CalculateMoj calc = new CalculateMoj();
        calc.setIndicator(12);
        calc.setOperation('*');
        calc.setIndicator(3);
        calc.setOperation('=');
        assertEquals("Result of division operation", 36, calc.getIndicator());
    }

    public void testComplexOperation4() {
        CalculateMoj calc = new CalculateMoj();
        calc.setIndicator(12);
        calc.setOperation('-');
        calc.setIndicator(3);
        calc.setOperation('=');
        assertEquals("Result of division operation", 9, calc.getIndicator());
    }

    public void main(String args[]) {
        TestRunner runner = new TestRunner();
        TestSuite suite = new TestSuite();
        suite.addTest(new TestClass("testComplexOperation"));
        suite.addTest(new TestClass("testComplexOperation2"));
        suite.addTest(new TestClass("testComplexOperation3"));
        suite.addTest(new TestClass("testComplexOperation4"));
        suite.addTest(new TestClass("testComplexOperation5"));
        runner.doRun(suite);
    }
}

класс  калькулятор
Код

public class CalculateMoj {
    private int indicator;
    private char operation;
    private double memory = 0.0;
    private double result;
    private int counter;
    private int zapom;
    private int zapom2;

    public int getIndicator() {
        return indicator;
    }

    public void setIndicator(int indicator) {
        if (counter == 0) {
            zapom = indicator;
            this.indicator = indicator;
        } else {
            zapom2 = indicator;
            this.indicator = indicator;
        }
    }

    public void setOperation(char operation) {
        if (operation != '=') {
            this.operation = operation;
            counter = 1;
        } else {
            switch (this.operation) {
                case('-'):
                    this.indicator = zapom - zapom2;
                    break;
                case('+'):
                    this.indicator = zapom + zapom2;
                    break;
                case('*'):
                    this.indicator = zapom * zapom2;
                    break;
                case('/'):
                    this.indicator = zapom / zapom2;
                    break;
            }
            zapom = this.indicator;
            zapom2 = 0;
            counter = 0;
        }
        this.operation = operation;
    }

    public double getMemory() {
        return memory;
    }

    public void setMemory(double memory) {
        this.memory = memory;
    }

    public static void main(String[] args) {
    }
}

осталось разобраться с Memory !!
PM MAIL   Вверх
AlexeyVorotnikov
Дата 25.10.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Стоп-стоп-стоп! Ты же только что сказал, что нельзя вводить переменные. Так почему же ты добавил
    private double result;
    private int counter;
    private int zapom;
    private int zapom2;
?


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
alex_nevolin
Дата 25.10.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 13.8.2007

Репутация: 3
Всего: 4



Вот тут была аналогичная задачка и красивое решение

Это сообщение отредактировал(а) alex_nevolin - 25.10.2007, 15:01
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0608 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.