Можно ли иметь значения перечисления в качестве частных постоянных stati c в Java? - PullRequest
0 голосов
/ 06 марта 2020

Возможно ли иметь значения перечисления в качестве частных данных c конечные константы в Java?

В настоящее время я пишу класс IssueTest для класса Issue. В классе Issue у меня есть внутреннее перечисление для типа Issue, которое может быть ошибкой или улучшением.

public enum IssueType {
        ENHANCEMENT,
        BUG;
}

В одном из конструкторов для Issue одним из параметров является IssueType.

public Issue(IssueType type, String state, String summary) {

}

Я пытаюсь написать пример для проверки этого конструктора. В моем тестовом классе я пытался создать константу для IssueTypes, например,

private static final IssueType TYPE_BUG = BUG;  
private static final IssueType TYPE_ENHANCEMENT = ENHANCEMENT;

Но эти строки вызывают ошибки компилятора. Я не уверен, как использовать константу IssueType в моем тестовом классе для проверки конструкторов. Любое руководство с благодарностью!

1 Ответ

0 голосов
/ 06 марта 2020

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

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

package de.scrum_master.stackoverflow.q60556923;

public class Issue {
  public enum IssueType {
    ENHANCEMENT,
    BUG
  }

  public Issue(IssueType type, String state, String summary) {}
}
package de.scrum_master.stackoverflow.q60482676;

import de.scrum_master.stackoverflow.q60556923.Issue.IssueType;
import org.junit.Test;

import static de.scrum_master.stackoverflow.q60556923.Issue.IssueType.*;
import static org.junit.Assert.assertEquals;

public class IssueTest {
  // Seriously?! Nah, rather not.
  private static final IssueType TYPE_BUG = BUG;
  private static final IssueType TYPE_ENHANCEMENT = ENHANCEMENT;

  @Test
  public void testUsingStaticFinal() {
    // Does this make anything better or just obfuscate and complicate the test?
    assertEquals("BUG", TYPE_BUG.toString());
    assertEquals("ENHANCEMENT", TYPE_ENHANCEMENT.toString());
  }

  @Test
  public void testUsingEnumDirectly() {
    assertEquals("BUG", BUG.toString());
    assertEquals("ENHANCEMENT", ENHANCEMENT.toString());
  }
}
...