Как проверить структуру возвращаемого объекта из вызова метода? - PullRequest
0 голосов
/ 02 августа 2011

Я пытаюсь выполнить модульный тест для структуры объекта, я делаю вызов метода getResults(), и он возвращает мне object имеет свойства, такие как:

double mathMarks, double scienceMarks, double historyMarks, теперь, как мне проверить структуру возвращаемого объекта в моем классе Junit?

у меня есть vo, где определены double mathMarks, double scienceMarks, double historyMarks, я не уверен, как я могу проверить структуру возвращаемого объекта в моем тестовом классе? Есть предложения?

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Поскольку Java строго типизирован, а не является динамическим языком, этот тип тестирования на самом деле не нужен.У вас должен быть какой-то ResultClass со своими собственными тестами, поэтому структура этого класса неявно проверяется для вас.

Если ваш метод может возвращать подклассы, можно проверить, что возвращаемый класс является правильнымтип основан на вводе, но эти подклассы должны иметь свои собственные модульные тесты, которые проверяют их функциональную структуру.

Также обратите внимание, что если в вашем классе результатов есть метод, такой как getScienceMarks, вы должны убедиться, что возвращаемое значениеисправить на основе ввода в метод, который вернул результаты.Здесь вы убедитесь, что класс, который вы тестируете, работает правильно.Это неявная проверка структуры результирующего класса;то есть, что у него есть соответствующие методы.

1 голос
/ 02 августа 2011

Если я правильно понимаю ваш вопрос, используйте Hamcrest:

MyPojo pojo = ...getResults();
assertThat(pojo, allOf(
    hasProperty("mathMarks", equalTo(123),
    hasProperty("scienceMarks", equalTo(321),
    ...));

Сопоставитель hasProperty проверяет, что данный объект имеет определенные свойства JavaBean с заданными значениями (сопоставители значений являются необязательными).

0 голосов
/ 02 августа 2011

В Java у вас обычно есть интерфейс или общий суперкласс, который определяет обязательные члены.Затем вы можете выполнить тестирование с помощью assertTrue(a instanceof SomeClass). Обратите внимание, что этот тест не пройден, даже если возвращаемые объекты имеют требуемые члены, но не реализуют / не расширяют SomeClass.

Если вы хотите / должны работать с полями, вы можете использоватьотражение проверить наличие полей и типа там.

Третьей альтернативой может быть использование языка, подобного groovy, для вашего теста.Это позволит вам написать код, обращающийся к коду, независимо от того, есть он на самом деле или нет.По крайней мере, я думаю, что это должно быть возможно, но так как я никогда не работал с Groovy, я не могу предоставить какие-либо подробности.

Чтобы выбрать правильный подход, возникает вопрос: как клиентский код получает доступ кполя / членов.Ваши тесты должны использовать тот же подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...