Как написать junit для вводимой guice переменной stati c, объявленной внутри Enum - PullRequest
0 голосов
/ 09 июля 2020

У меня есть такое перечисление

public enum NumbersJk {

    ONE {
        public void processCommand(Info Info) {
            log.info("what is in process " + process)
            process.add(Info);
        }
    },
    TWO {
        public void processCommand(Info Info) {
            process.subtract(Info);
        }
    },
    TEN {
        public void processCommand(Info Info) {
            process.divide(Info);
        }
    }

    @Inject
    private static ProcessNumber process;

    public abstract void processCommand(Info Info) throws Exception;
}

Он был введен с использованием подобного guice requestStaticInjection(NumbersJk.class);

public class AddNumbers {
   public string testMethod(bla,bla,commandToExecute){
      Info info = convert(bla,bla)
      NumbersJk.valueOf(commandToExecute).processCommand(Info);
   }
}

Теперь я пытаюсь написать junit (powermockito) для этого

Junit

@Mock
private ProcessNumber process = new ProcessNumber(new depsencey(), dependecny2());

@InjectMocks
AddNumber addNumber;

@Before
public void setUp() throws Exception {

    MockitoAnnotations.initMocks(this);
}


@Test
@SneakyThrows
public void test() { 
    addNumber.testMethod(1,2,ONE) 
}

Это внутренне вызывает

NumbersJk.valueOf(commandToExecute).processCommand(Info);

и получает исключение java.lang.NullPointerException: null

Это ProcessNumber идет как null

log.info("what is in process " + process) printed as `what is in process null`

Вопрос:

Как залить класс ProcessNumber в junit

Спасибо Jk

1 Ответ

0 голосов
/ 10 июля 2020

Я разобрался. Мы можем использовать powermock для решения этой проблемы Whitebox.setInternalState(NumbersJk.class, process);

Код:

@Mock
private ProcessNumber process = new ProcessNumber(new depsencey(), dependecny2());

@InjectMocks
AddNumber addNumber;

@Before
public void setUp() throws Exception {
    Whitebox.setInternalState(NumbersJk.class, process);
    MockitoAnnotations.initMocks(this);
}


@Test
@SneakyThrows
public void test() { 
    addNumber.testMethod(1,2,ONE) 
}
...