Как я могу установить значение для строки в модульном тесте? - PullRequest
1 голос
/ 27 мая 2020

В моем текущем классе у меня есть поле, которое выглядит так:

class

 @Inject
 @ConfigValue(key = ConfigProperties.ADDRESS)
 private String address;

ConfigProperties

  public static final String ADDRESS = //
        "42 Rue Cadet, 75009 Paris";

У меня есть метод:

 ...... 
 private boolean isValidAddress() {
    if(address != null && address.equals("42 Rue Cadet, 75009 Paris")) {
        return true;
    } else {
        return false;
    }
 } 
 ......

Я хочу создать модульный тест, который проверяет метод isValidAddress (), но я не знаю, как установить адрес.

Например: я хочу протестировать с этим адресом = "23 Rue Luvru, 75045 Paris". Я думал издеваться над ConfigProperties, но у меня нет метода в ConfigProperties, где я мог бы установить значение для адреса.

Есть предложения?

1 Ответ

0 голосов
/ 27 мая 2020

Мы столкнулись с той же проблемой, и использование отражения для решения проблемы, как предлагают многие люди, довольно громоздко ... поэтому мы написали расширение JUnit5 для решения этой точной проблемы:

https://github.com/exabrial/mockito-object-injection

Что он делает, так это вводит значения в ваш тестируемый класс, которые имеют те же имена ключей на карте, которую вы предоставляете.

@TestInstance(Lifecycle.PER_METHOD)
@ExtendWith({ MockitoExtension.class, InjectMapExtension.class })
public class MyControllerTest {
 @InjectMocks
 private MyController myController;
 @Mock
 private Logger log;
 @Mock
 private Authenticator auther;
 @InjectionMap
 private Map<String, Object> injectionMap = new HashMap<>();

 @BeforeEach
 public void beforeEach() throws Exception {
  injectionMap.put("securityEnabled", Boolean.TRUE);
 }

 @AfterEach
 public void afterEach() throws Exception {
  injectionMap.clear();
 }

 public void testDoSomething_secEnabled() throws Exception {
  myController.doSomething();
 }
...