Reputation: 2971
First of all i'm learning java and mockito, did search and cannot find proper answer yet.
The pseudo code is like this
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);
}
}
My question is in unit test, how to generate mocked prodNames ? Only 2 or 3 of the products needed for testing, In my unit test i tried this
List<ProdEnum> newProds = Arrays.asList(ProdEnum.PROD1, ProdEnum.PROD2);
when(ProdEnum.values()).thenReturn(newProds);
but it says Cannot resolve method 'thenReturn(java.util.List<...ProdEnum>)'
Thanks !
Upvotes: 0
Views: 13402
Reputation: 26502
You cannot mock statics in vanilla Mockito.
If your up for a little refactor then:
1) Move enum.values()
call into a package level method:
..
List<String> prodNames = Array.stream(getProdNames())
.map(prodEnum::getName)
.collect(Collectors.toList());
..
List<String> getProdNames(){
return ProdEnum.values();
}
2) Spy on your SUT:
enum1 enumOneSpy = Mockito.spy(new enum1());
3) Mock the getProdNames()
method:
doReturn(newProds).when(enumOneSpy).getProdNames();
Upvotes: 2