java - 如何模拟抽象类构造函数
问题描述
我无法模拟抽象类中的构造函数。尝试读取时获取 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();
}
}
解决方案
推荐阅读
- c# - Dotnet Core 3.1 - 更新到 3.1 并使用“HasDefaultValue”设置默认值似乎不存在
- google-chrome - 在 GTM 变量中获取 ID 值?
- intellij-idea - 如何在 Intellij Plugin 中格式化动态创建的 kotlin 文件
- c - 如何在 C 服务器中同步 HTTP 请求
- python - 在模板Django中使用包含数字作为范围的for循环
- python-3.x - 预期尺寸为 5,但得到形状为 (10000, 64, 173, 1) 的数组(GTZAN 数据集上的 CNN + LSTM)
- python - Flask:无法从外部访问应用程序
- regex - 必须释放创建的 System.RegularExpressions 对象的内存吗?
- reactjs - 如何在 React 的状态数组对象中显示嵌套值?
- ms-access - 查询中突然错误的运行总和值