簡體   English   中英

如何在Mockito中模擬enum.values()

[英]How to mock enum.values() in mockito

首先,我正在學習Java和Mockito,進行了搜索並且找不到合適的答案。

偽代碼是這樣的

public enum ProdEnum {
    PROD1(1, "prod1"),
    PROD2(2, "prod2"),
    ......
    PROD99(2, "prod2");

    private final int id;
    private final String name;

    private ProdEnum(int id, String name) {
        this.id = id;
        this.name = name;
    }

    prublic String getName() { return this.name; }
}


public class enum1 {
   public static void main(String[] args) {
      // Prints "Hello, World" in the terminal window.
      System.out.println("Hello, World");

      List<String> prodNames = Array.stream(ProdEnum.values())
            .map(prodEnum::getName)
            .collect(Collectors.toList());

      // verify(prodNames);
   }
}

我的問題是在單元測試中,如何生成模擬的prodNames? 僅2或3種產品需要測試,在我的單元測試中,我嘗試了

List<ProdEnum> newProds = Arrays.asList(ProdEnum.PROD1, ProdEnum.PROD2);
when(ProdEnum.values()).thenReturn(newProds);

但是它說無法解析方法'thenReturn(java.util.List <... ProdEnum>)'

謝謝 !

您無法在香草Mockito中模擬靜力學。

如果您需要一點重構,那么:

1)enum.values()調用移至包級方法中:

..
List<String> prodNames = Array.stream(getProdNames())
            .map(prodEnum::getName)
            .collect(Collectors.toList());
..

List<String> getProdNames(){
  return ProdEnum.values();
}

2)監視您的SUT:

enum1 enumOneSpy = Mockito.spy(new enum1());

3)模擬getProdNames()方法:

doReturn(newProds).when(enumOneSpy).getProdNames();

暫無
暫無

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

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