首页 > 解决方案 > 如何模拟抽象类构造函数

问题描述

我无法模拟抽象类中的构造函数。尝试读取时获取 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();
     }

}   

标签: javajunitmockito

解决方案


推荐阅读