模拟最终的 class 变量
Mocking a final class variable
我正在尝试测试 class,其中使用了 class 的最终实例。我不知道如何创建这个最终对象的模拟(在我们的示例 foo 中)。经过大量挖掘后,我开始使用 powermockito 和 whenNew 方法。由于我是 JUnits 的新手,所以我不确定我是否正确地做这件事。
看了这个之后,我将 @PrepareForTest
更改为 Sample.class
(之前是 Foo.class
),之后 foo 和 koo 都为空。
Class 富
public class Foo{
void hello(){
}
}
Class样本
public class Sample{
private final Foo foo= new Foo();
private Koo koo = new Koo();
String run(){
String strr = koo.something();
return foo.hello();
}
}
测试Class
@RunWith(PowerMockRunner.class)
@PrepareWith({Sample.class})
public class SampleTest{
@InjectMocks
private Sample sample;
@Mock
private Koo koo;
@Test
void run(){
Foo foo = PowerMockito.mock(Foo.class);
PowerMockito.whenNew(Foo.class).withNoArguments.thenReturn(foo);
when(koo.something()).thenReturn("abc");
when(foo.hello()).thenReturn("def");
String check = sample.run();
assertEquals("abc", check);
}
}
foo 是一个实例变量,在实例化 Sample class 时将被初始化。如果你想使用 whenNew 模拟这个实例变量,那么它应该在测试方法执行之前加载样本 class 时发生。
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Sample.class })
public class SampleTest {
@InjectMocks
private Sample sample;
@BeforeClass
public static void setUp() throws Exception {
Foo foo = PowerMockito.mock(Foo.class);
Mockito.when(foo.hello()).thenReturn("def");
PowerMockito.whenNew(Foo.class).withNoArguments().thenReturn(foo);
}
@Test
public void run() throws Exception {
String check = sample.run();
Assert.assertEquals("def", check);
}
}
我正在尝试测试 class,其中使用了 class 的最终实例。我不知道如何创建这个最终对象的模拟(在我们的示例 foo 中)。经过大量挖掘后,我开始使用 powermockito 和 whenNew 方法。由于我是 JUnits 的新手,所以我不确定我是否正确地做这件事。
看了这个之后,我将 @PrepareForTest
更改为 Sample.class
(之前是 Foo.class
),之后 foo 和 koo 都为空。
Class 富
public class Foo{
void hello(){
}
}
Class样本
public class Sample{
private final Foo foo= new Foo();
private Koo koo = new Koo();
String run(){
String strr = koo.something();
return foo.hello();
}
}
测试Class
@RunWith(PowerMockRunner.class)
@PrepareWith({Sample.class})
public class SampleTest{
@InjectMocks
private Sample sample;
@Mock
private Koo koo;
@Test
void run(){
Foo foo = PowerMockito.mock(Foo.class);
PowerMockito.whenNew(Foo.class).withNoArguments.thenReturn(foo);
when(koo.something()).thenReturn("abc");
when(foo.hello()).thenReturn("def");
String check = sample.run();
assertEquals("abc", check);
}
}
foo 是一个实例变量,在实例化 Sample class 时将被初始化。如果你想使用 whenNew 模拟这个实例变量,那么它应该在测试方法执行之前加载样本 class 时发生。
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Sample.class })
public class SampleTest {
@InjectMocks
private Sample sample;
@BeforeClass
public static void setUp() throws Exception {
Foo foo = PowerMockito.mock(Foo.class);
Mockito.when(foo.hello()).thenReturn("def");
PowerMockito.whenNew(Foo.class).withNoArguments().thenReturn(foo);
}
@Test
public void run() throws Exception {
String check = sample.run();
Assert.assertEquals("def", check);
}
}