Использование отражения Java возвращает все нули - PullRequest
1 голос
/ 12 марта 2012

Я довольно потерян на этом. У меня есть некоторые тесты приемлемости, работающие с JUnit4 на основе Spring. Теперь я также хочу добавить модульные тесты. Чтобы сделать их быстрыми, я пропускаю контекст и внедряю макеты с помощью PowerMock. Однако внезапное отражение больше не сработает.

public class TestSomething {
    @Test
    public void nothingWrongWithThis() {
        Class<?> type = Client.class;
        type.getDeclaredMethods();
    }
}

Вторая строка будет возвращать ноль, как и любой другой вызов метода, кроме getName ()

Если я использую контекст, однако он будет работать:

@TransactionConfiguration
@ContextConfiguration({ "classpath:dw-product-context-test.xml" })
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
public class TestSomething {
    @Test
    public void nothingWrongWithThis() {
        Class<?> type = Client.class;
        type.getDeclaredMethods();
    }
}

Что здесь не так? Разве отражение не должно работать без какого-либо бегуна или контекста?

Даже не добавляя строку

private Client client = new Client();

изменит что-либо (подумал, может быть, время выполнения, необходимое для инициализации класса, чтобы иметь возможность размышлять над ним)

Да и добавление

@RunWith(PowerMockRunner.class)

тоже ничего не изменит.

Есть идеи?

Спасибо!

PS: Буду отсутствовать в городе, начиная с сегодняшнего дня, поэтому я прочитаю любой ответ через 35 часов.


Редактировать

Просто выяснил, что происходит: Я начал в своем отладчике и открыл Client.class.declaredMethods, который был null. Однако, когда я запускаю getDeclaredMethods(), он их получит. Так что сначала все выглядело как нулевое, что меня смутило, но отладчик просто не запускал get...() на всех полях, оставляя их null изначально

Если я использую контекст весны, он загрузит все bean-компоненты (Client - это @Entity) и заполнит все поля отражения мягкими ссылками, как если бы я вызвал get..() для всех из них.

1 Ответ

0 голосов
/ 14 марта 2012

Только что понял: отсутствует знание о том, как работают отражения при использовании в отладчике;) Проверьте мое редактирование ... Пометьте это как ответное, но оставьте его как ссылку.

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