Я не могу издеваться над конструктором в абстрактном классе. Получение NPE при попытке прочитать System.getenv("SOME_ENV")
. Я попробовал так много комбинаций, как @spy
, @Mock
, установил переменные и попытался добавить разных бегунов, но безуспешно. Может кто-нибудь помочь, пожалуйста?
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
public abstract class AbstractClass {
private String x;
public AbstractClass(){
try {
x = new String(Files.readAllBytes(Paths.get(System.getenv("SOME_ENV"))));
}
catch (IOException e){
e.printStackTrace();
}
}
}
// ConcrteClass. java
class ConcrteClass extends AbstractClass {
public void method1() {
System.out.println("from sub class");
}
}
// ConcrteClassTest. java
@RunWith(PowerMockRunner.class)
@PrepareForTest({ System.class, ConcrteClass.class, AbstractClass.class })
public class ConcrteClassTest {
@Mock
ConcrteClass concrteClass;
@BeforeEach
public void test() {
PowerMockito.when(System.getenv(Mockito.eq("SOME_ENV"))).thenReturn("xyz");
}
@Test
public void testMethod(){
concrteClass = new ConcrteClass();
}
}