簡體   English   中英

如何為在枚舉中聲明的 guice 注入 static 變量編寫 junit

[英]How to write junit for guice injected static variable which is declared inside Enum

我有這樣的枚舉

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`

問題:

如何在 junit 中注入 class ProcessNumber

謝謝Jk

我想到了。 我們可以使用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) 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM