【发布时间】:2022-01-03 17:09:57
【问题描述】:
例如,我有以下类:
public class TesteEstatico {
public static String teste(){
return "FOO";
}
}
我有一个类使用她的方法:
public class UsaTesteEstatico {
public String metodoParaTeste1 (){
return TesteEstatico.teste() + " BAR ";
}
public String metodoParaTeste2 (){
return "FOO "+TesteEstatico.teste() + " BAR ";
}
}
测试类:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class) public class UsaTesteEstaticoTest {
@InjectMocks
UsaTesteEstatico usaTesteEstatico;
@Test
void teste1(){
Mockito.mockStatic(TesteEstatico.class);
Mockito.when(TesteEstatico.teste())
.thenReturn("BANANA");
String res = usaTesteEstatico.metodoParaTeste1();
System.out.println(res);
}
@Test
void teste2(){
Mockito.mockStatic(TesteEstatico.class);
Mockito.when(TesteEstatico.teste())
.thenReturn("LARANJA");
String res = usaTesteEstatico.metodoParaTeste2();
System.out.println(res);
}
}
我在尝试运行测试时遇到的错误:
org.mockito.exceptions.base.MockitoException: 对于 TesteEstatico,静态模拟已在当前线程中注册 要创建新的模拟,必须取消注册现有的静态模拟注册
项目中的库版本:
- junit-jupiter 5.5.2
- mockito-junit-jupiter 3.2.14
- mockito-inline 3.2.14
知道如何解决这个问题,我尝试了一些方法但没有成功。
注意:我不能更改或添加任何新库,因为它是一个受限制的项目。
【问题讨论】:
-
使用
@BeforeAll-方法来初始化静态模拟,而不是在每个测试中初始化它。 -
@Lesiak
Mockito.reset(Mockito.mockStatic(TesteEstatico.class))会是这样吗?