2012-03-12 3 views
1

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

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(); 

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

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

@RunWith(PowerMockRunner.class) 

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

Любые идеи?

Спасибо!

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


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

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

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

+0

Используете ли вы какое-либо временное ткачество? Вы уверены, что оба теста используют один и тот же класс «Клиент» (тот же пакет)? – Ralph

+0

Как может 'type.getDeclaredMethods();' return 'null', или вы имеете в виду, что он возвращает пустой массив? – Ralph

+0

Спасибо за ваши комментарии. Выяснилось, проверьте мое редактирование. – Pete

ответ

0

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