Получить доступ к частному перечислению в Java

У меня есть следующее перечисление Java:

enum IssueMap {

  ISSUE_TYPE,

  public static .... getIssueTypes(String IssueName) {
    
    return ...;
  }

} 

Обратите внимание, что у меня нет открытого ключевого слова перед перечислением!

Я хочу вызвать этот код в тесте JUnit следующим образом:

  @Test
  public void genericTest() {
    ....... = IssueMap.getIssueTypes(....);
    assertNotNull(...);
  }

Я получаю ошибку 'com.IssueMap' is not public in 'com....'. Cannot be accessed from outside package

Я не могу изменить исходный код перечисления. Есть ли какое-то решение с отражением, например, для доступа к коду перечисления?

Поместите тест в тот же пакет, что и перечисление.

Just another Java programmer 09.05.2023 12:08

Поместите свой модульный тест в пакет «com»

John Williams 09.05.2023 12:09

перечисления являются пакетными по умолчанию. Поэтому предложение от @JustanotherJavaprogrammer должно работать.

roediGERhard 09.05.2023 12:15

Что такое «публичный интрон»? А если вам нужен доступ извне, то почему он закрытый?

user207421 09.05.2023 12:19

как IssueMap.getIssueTypes(....) используется в вашем коде? Перечисление не является общедоступным, другими словами, это деталь реализации, инкапсулированная в более крупный вариант использования. Например, если ServiceX использует эти типы задач при реализации methodY, возможно, достаточно протестировать только ServiceX.methodY().

Emanuel Trandafir 09.05.2023 12:32

@EmanuelTrandafir вызывается в том же пакете

Peter Penzov 09.05.2023 12:39

@PeterPenzov, но в конечном итоге он должен быть вызван каким-то общедоступным методом, даже если этот метод является частью другого класса.

Emanuel Trandafir 09.05.2023 13:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
7
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

package com.myenum;

enum IssueMap {

  ISSUE_TYPE,

  public static .... getIssueTypes(String IssueName) {
    
    return ...;
  }

} 
package com.myenum;

class IssueMapTest {
  @Test
  public void genericTest() {
    ....... = IssueMap.getIssueTypes(....);
    assertNotNull(...);
  }
}

Обратите внимание, что имя пакета в IssueMap и IssueMapTest совпадает. Несмотря на то, что мой путь к IssueMap — src/main/java/com/myenum/IssueMap.java, а путь к IssueMapTest — src/test/java/com/myenum/IssueMapTest.java

Другие вопросы по теме