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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> тестирование мметода который возвращает void, JUnit 
V
    Опции темы
goodday1941
Дата 9.11.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



В общем то как тестировать методы которые ничего не возвращают...

к примеру я хочу протестировать метод add в коллекции ArrayList, как мне в этом случае написать тест? 


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
Kangaroo
Дата 9.11.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



Если ты тестируешь add, ты ожидаешь что-то этот элемент добавится в лист. Поэтому проверяй  с помощью get добавился ли он туда. Вот и все.


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


Super star !
****


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

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



goodday1941,  Пример теста калькулятора
Код

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

Сами  методы :
Код

public void setIndicator(int indicator) {
        if (operandCount == 0) {
            m1 = indicator;
            this.indicator = indicator;
        } else {
            m2 = indicator;
            this.indicator = indicator;
        }
    }
    public void setOperation(char operation) {
        if (operation != '=') {
            this.operation = operation;
            operandCount = 1;
        } else {
            if (this.operation == '-')
                this.indicator = m1 - m2;
            if (this.operation == '+')
                this.indicator = m1 + m2;
            if (this.operation == '*')
                this.indicator = m1 * m2;
            if (this.operation == '/')
                this.indicator = m1 / m2;

            m1 = this.indicator;
            m2 = 0;
            operandCount = 0;
        }
    }

PM MAIL   Вверх
goodday1941
Дата 9.11.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



гм... хорошо у меня к примеру есть вот такой вот простенький код:
Код

import java.util.List;

public class ReverseList{
    public static void reverseList(List list){
        Object[] tmp= list.toArray();
        list.clear();
        for (int i = tmp.length-1; i>=0;i--){
            list.add(tmp[i]);
        }
    }
}


как написать тест в таком случае?

Добавлено через 1 минуту и 46 секунд
2Samotnik: а где метод calc.getIndicator()?


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
goodday1941
Дата 9.11.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



я сделал вот так вот:

Код

@RunWith(Parameterized.class)
public class TestReverseList {

    @Parameterized.Parameters
    public static Collection data() {

        List testList1 = new ArrayList();
        testList1.add(7);
        testList1.add(3);
        testList1.add(5);

        List reverseTestList1 = new ArrayList();
        reverseTestList1.add(5);
        reverseTestList1.add(3);
        reverseTestList1.add(7);

        List testList2 = new ArrayList();
        testList2.add("a");
        testList2.add("d");
        testList2.add("zz");

        List reverseTestList2 = new ArrayList();
        reverseTestList2.add("zz");
        reverseTestList2.add("d");
        reverseTestList2.add("a");

        return Arrays.asList(new Object[][] {
                { testList1, reverseTestList1 },
                { testList2, reverseTestList2 }
        });
    }

    List testList, reverseTestList;

    public TestReverseList(List testList, List reverseTestList) {
        this.testList = testList;
        this.reverseTestList = reverseTestList;
    }

    @Test
    public void getReverseList(){
        ReverseList.reverseList(testList);
        assertEquals(reverseTestList, testList);
    }

    public static void main(String[] args) {
        JUnitCore core= new JUnitCore();
        core.addListener(new TestReverseListListener());
        core.run(TestReverseList.class);
    }
}


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

Добавлено через 3 минуты и 47 секунд
и еще нашел вот такой вот листенер в "Студенческом отделе кадров":
Код

class TestReverseListListener extends RunListener {
    public void testStarted(Description desc) {
        System.out.println("Started:"+desc.getDisplayName());
    }

    public void testFinished(Description desc) {
        System.out.println("Finished:"+desc.getDisplayName());
   }

    public void testFailure(Failure fail) {
        System.out.println("Failed:"+fail.getDescription().getDisplayName()+" ["+fail.getMessage()+"]");
    }
}


есть ли метод который выводит время выполнения метода, что то я ничего не нашел такого :( ?


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
Kangaroo
Дата 9.11.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



Цитата(goodday1941 @  9.11.2007,  17:25 Найти цитируемый пост)
что кто может сказать? правильно ли так тестировать?

На счет "правильно ли" не могу сказать, но я бы тестировал похоже.



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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



я конечто не гуру написания тестов, но ты очень не плохо придумал smile
тестик простенький, но на правильность проверит ..

Цитата(goodday1941 @  9.11.2007,  18:25 Найти цитируемый пост)

есть ли метод который выводит время выполнения метода, что то я ничего не нашел такого :( ? 

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

Добавлено через 29 секунд
пост № 300  smile  smile  smile 


--------------------
PM   Вверх
goodday1941
Дата 9.11.2007, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



ладненько, подождем мнение других участников форума smile

Добавлено @ 18:42
Цитата(v2v @  9.11.2007,  18:40 Найти цитируемый пост)
получай время в секундах до, и после вызова метода, потом отнимай - вот тебе и время работы метода

не, ну это понятно... но я же про другое спрашивал smile

Добавлено @ 18:43
просто я тесты никогда не писал, а тут вот попросили, и хочу хоть приблизительно понять как это "правильно написанный тест"

Добавлено @ 18:48
гм и тоже попутный вопрос: к примеру я тестирую метод, допустим такой вот:

public int getTest(int i){
if (i==1) throws new Exception("i=1");
else return 1;
}

и я хочу протестировать ситуацию когда выбрасывается исключение smile
как в таких случаях поступают?

Это сообщение отредактировал(а) goodday1941 - 9.11.2007, 18:50


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
v2v
Дата 9.11.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



если у тебя метод выбрасывает исключение: 
public int getTest(int i) throws Exception  {
 - - - 
}
тогда ты должен в тесте его перехватит и сообщить об этом: fault("Исключение...");



Цитата(goodday1941 @  9.11.2007,  18:41 Найти цитируемый пост)

не, ну это понятно... но я же про другое спрашивал smile

как по твоему такой метод может узнать что такое предыдущий выполненый метод... не знаю про существование таковых..


--------------------
PM   Вверх
goodday1941
Дата 9.11.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



Цитата(v2v @  9.11.2007,  18:53 Найти цитируемый пост)
не знаю про существование таковых..

хорошо будем считать что его нету smile но блин время с точностью до милисикунд будет почти всегда выдавать 0 :(



--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
v2v
Дата 9.11.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



вызывай 1000 раз свой метод smile


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


Super star !
****


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

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



Цитата(goodday1941 @  9.11.2007,  18:25 Найти цитируемый пост)
что кто может сказать? правильно ли так тестировать?

тестики нормальные, просто и со вкусом  smile 
PM MAIL   Вверх
goodday1941
Дата 9.11.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



оке закрываю тему.. спасибо всем кто отозвался smile


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

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

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


 




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


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

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