Как протестировать это?...
От: kurel  
Дата: 05.02.13 14:59
Оценка:
class Something {
    public void add(Integer value) {
        // ...
    }
    public boolean has(Integer value) {
        // ...
    }
}

Метода наподобие get() в классе не имеется. Как я могу протестировать эти два метода? Начиная с написания с теста для add() (или для has(), неважно) придется использовать has(), который мы еще не протестировали и поэтому не знаем, правильно ли он работает. Т.е. до того, пока мы не протестим метод has(), мы не сможем протестить метод add(). Таким же образом с методом has(), ведь его мы не сможем проверить, не добавляя элементы в него.
Как лучше решить подобное?
Re: Как протестировать это?...
От: Аноним  
Дата: 05.02.13 15:31
Оценка:
Здравствуйте, kurel, Вы писали:

Конструктор или какой-нибудь метод инициализации у этого класса имеется?
Re[2]: Как протестировать это?...
От: kurel  
Дата: 05.02.13 15:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Конструктор или какой-нибудь метод инициализации у этого класса имеется?

Нет, только конструктор по-умолчанию — он создается пустым.
Re[3]: Как протестировать это?...
От: Аноним  
Дата: 05.02.13 16:30
Оценка:
Здравствуйте, kurel, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>Конструктор или какой-нибудь метод инициализации у этого класса имеется?

K>Нет, только конструктор по-умолчанию — он создается пустым.
Осталось узнать для какого значения метод has вернет истину сразу после создания объекта, сразу после выполнения конструктора по умолчанию. То есть надо узнать чем равно значение по умолчанию "закрытой переменной типа Integer", с которым работают тестируемые методы.
Re[4]: Как протестировать это?...
От: kurel  
Дата: 05.02.13 16:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Осталось узнать для какого значения метод has вернет истину сразу после создания объекта, сразу после выполнения конструктора по умолчанию. То есть надо узнать чем равно значение по умолчанию "закрытой переменной типа Integer", с которым работают тестируемые методы.


Простите, похоже я неправильно объяснил, что мне нужно.
Вопрос был об общем случае. Допустим есть класс-контейнер, который позволяет добавлять в него элементы и узнавать, содержит ли он какой-то элемент, но не позволяет получить содержащийся(еся) элемент(ы). Как можно протестировать два данных метода (add() и has()), если тестирование одного из них возможно только с использованием другого метода? Или это все таки невозможно сделать?
Re[5]: Как протестировать это?...
От: Аноним  
Дата: 05.02.13 17:17
Оценка:
Здравствуйте, kurel, Вы писали:

K>... Как можно протестировать два данных метода (add() и has()), если тестирование одного из них возможно только с использованием другого метода? Или это все таки невозможно сделать?


В виду того что результат работы этих методов зависит от внутреннего состояния тестируемого объекта, без знания этого состояния невозможно протестировать этот объект. Вообще то можно, если предварительным брутфорсом "узнать" внутреннее состояние (метод тестирования черного ящика, вроде так называется). После инициализации объект имеет заранее известное внутреннее состояние, иначе этот объект бесполезен с практической точки зрения.
Re: Как протестировать это?...
От: Anton Batenev Россия https://github.com/abbat
Дата: 06.02.13 02:21
Оценка: +2
Здравствуйте, kurel, Вы писали:

k> Метода наподобие get() в классе не имеется. Как я могу протестировать эти два метода?


Добавить метод count, или isEmpty — это не раскрывает список элементов, но позволяет узнать состояние контейнера (count для тестирования предпочтительней). В противном случае кот получается ни жив и не мертв.
avalon/1.0.432
Re: Как протестировать это?...
От: Aikin Беларусь kavaleu.ru
Дата: 06.02.13 11:10
Оценка: +4
Здравствуйте, kurel, Вы писали:

K>Как лучше решить подобное?

Не заморачиваться.

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[2]: Как протестировать это?...
От: Patalog Россия  
Дата: 11.11.19 04:17
Оценка:
Здравствуйте, Aikin, Вы писали:


K>>Как лучше решить подобное?

A>Не заморачиваться.

Ответ нужно понимать как —
1. Не тестировать подобный класс вообще
2. Тестировать has через add, а add через has соответ.
3. Переписать так, чтобы …
4. ???
Почетный кавалер ордена Совка.
Re[3]: Как протестировать это?...
От: Буравчик Россия  
Дата: 11.11.19 07:07
Оценка: +6
Здравствуйте, Patalog, Вы писали:

P>Ответ нужно понимать как -

P>4. ???

Тестировать исполнение контракта — тестировать has вместе с add.

Первый тест: пустой контейнер, has(x) возвращает false
Второй тест: выполнили add(x), значит has(x) должен вернуть true
Best regards, Буравчик
Re[2]: Как протестировать это?...
От: Буравчик Россия  
Дата: 11.11.19 20:34
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Добавить метод count, или isEmpty — это не раскрывает список элементов, но позволяет узнать состояние контейнера (count для тестирования предпочтительней). В противном случае кот получается ни жив и не мертв.


В контейнере может быть не так просто реализовать count или isEmpty.
Например, если контейнер реализован через битовый массив.
Best regards, Буравчик
Re: Как протестировать это?...
От: C0x  
Дата: 12.02.21 14:56
Оценка:
Здравствуйте, kurel, Вы писали:


А в чем сложность?
Если не было add до has, будет false, ну а дальше уже бежишь по тестируемому списку значений и проверяешь {add(x), has(x)}. при двух условиях, если добавил и если не добавил
Re[2]: Как протестировать это?...
От: C0x  
Дата: 12.02.21 14:57
Оценка:
Здравствуйте, C0x, Вы писали:

Блин. Дату сообщения только сейчас увидел
Re: Как протестировать это?...
От: rosencrantz США  
Дата: 07.11.21 16:04
Оценка: +2
Здравствуйте, kurel, Вы писали:

K>Метода наподобие get() в классе не имеется. Как я могу протестировать эти два метода?


Вы совершаете методологическую ошибку Не надо тестировать методы, надо тестировать контракт через наблюдаемое поведение. Контракт у вас: если добавили, то оно есть, если не добавили, то его нету. "Наблюдаемое" здесь — во-первых знание вызывался add() или нет (т.к. вы его сами в тесте вызываете) и во-вторых has(), который возвращает true/false.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.