Как уже говорилось, если ваш метод size
нарушен, тест все равно потерпит неудачу, поэтому у вас есть причина, чтобы исследовать и понять, почему это происходит.
Во всяком случае, если вы все еще заинтересованы в имеющих такую независимость между тестами вы могли бы пойти на белого ящик тестирования стратегии: Я думаю, что ваш BoundedPropertyBlockingQueue
использует внутренне либо любой из java.util
коллекций, массива или коллекции от других поставщиков (Guava, Apache Collections и т. д.), на которые вы полагаетесь, поэтому вам не нужно проверять, что эти структуры работают так, как они должны делать.
Таким образом, определить, что внутренняя структура, как protected
поместите тестовый класс в пакете с тем же именем, и, вместо того, чтобы полагаться на реализацию метода size
, перейдите в кишках BoundedPropertyBlockingQueue
:
BoundedPriorityBlockingQueue q = BoundedPriorityBlockingQueue();
q.add(1);
assertEquals(1, q.contents.size()); // assuming that `contents` attribute is a collection.
Главный недостаток заключается в том, что теперь, если ваша внутренняя реализация очереди изменяется, вам нужно будет изменить тест, пока ваш предыдущий метод тестирования вам не понадобится.
IMO Я бы выбрал вашу текущую реализацию, менее связанную и, в конце концов, выполняет свою задачу.
Вы можете использовать отражение для получения вашей информации, не полагаясь на другие методы из объекта – Morfic
@Grove: Это было бы гораздо более хрупким, чем использование 'size()', IMO. Он будет опираться на детали реализации. –
@ Jon Я частично согласен, так как, если я не ошибаюсь, модульное тестирование должно быть проведено с использованием белого ящика. – Morfic