Я совсем потерялся на этом. У меня есть некоторые тесты на прием, которые работают с 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..()
на всех из них.
Используете ли вы какое-либо временное ткачество? Вы уверены, что оба теста используют один и тот же класс «Клиент» (тот же пакет)? – Ralph
Как может 'type.getDeclaredMethods();' return 'null', или вы имеете в виду, что он возвращает пустой массив? – Ralph
Спасибо за ваши комментарии. Выяснилось, проверьте мое редактирование. – Pete