如何模拟Mockito中的Enum.Values()



首先,我正在学习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);
   }
}

我的问题是在单元测试中,如何生成模拟的产品名称?测试所需的2或3种产品,在我的单位测试中,我尝试了此

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

,但它说无法解析方法'theReturn(java.util.list&lt; ... prodenum>)'

谢谢!

您无法在Vanilla 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();

相关内容

  • 没有找到相关文章

最新更新