我正在尝试模拟一个字符串列表,但它不起作用。我无法弄清楚问题所在
I'm trying to mock a list of strings but it's not working. I'm not able to figure out the problem
这是 class 和我为它编写的相应测试。有人可以帮我理解为什么 System.out.println(a.size()) 打印 0 ,什么时候应该打印 1000?
WorkingwithLists.java
import java.util.ArrayList;
import java.util.List;
public class WorkingwithLists
{
public static void main(String[] args) {
}
public void ListFunctions()
{
List<String > a=new ArrayList<>();
System.out.println(a.size());
}
}
WorkingwithListsTest.java
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.List;
import static org.mockito.Mockito.when;
import static org.testng.Assert.*;
public class WorkingwithListsTest
{
@Mock
private List<String> a;
private WorkingwithLists workingwithLists;
@BeforeMethod
public void setup()
{
MockitoAnnotations.openMocks(this);
workingwithLists=new WorkingwithLists();
}
@Test
public void testListFunctions() throws Exception
{
when(a.size()).thenReturn(1000);
workingwithLists.ListFunctions();
}
}
我不确定你为什么要这样做,但要实现这一点,你必须将“列表 a”移动到 class 级别,以便“模拟”和 return 任何你想要的。
我有下面的例子,希望这有帮助:
import java.util.ArrayList;
import java.util.List;
public class WorkingwithLists{
List<String > a=new ArrayList<>();
public static void main(String[] args) {
}
public void ListFunctions(){
System.out.println(a.size());
}
}
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.List;
@RunWith(MockitoJUnitRunner.class)
public class WorkingwithListsTest{
@InjectMocks
WorkingwithLists workingwithLists;
@Mock
private List<String> a;
@Before
public void setup(){
Mockito.when(a.size()).thenReturn(1000);
}
@Test
public void testListFunctions() throws Exception{
workingwithLists.ListFunctions();
Assert.assertTrue(true);
}
}
输出:
这是 class 和我为它编写的相应测试。有人可以帮我理解为什么 System.out.println(a.size()) 打印 0 ,什么时候应该打印 1000?
WorkingwithLists.java
import java.util.ArrayList;
import java.util.List;
public class WorkingwithLists
{
public static void main(String[] args) {
}
public void ListFunctions()
{
List<String > a=new ArrayList<>();
System.out.println(a.size());
}
}
WorkingwithListsTest.java
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.List;
import static org.mockito.Mockito.when;
import static org.testng.Assert.*;
public class WorkingwithListsTest
{
@Mock
private List<String> a;
private WorkingwithLists workingwithLists;
@BeforeMethod
public void setup()
{
MockitoAnnotations.openMocks(this);
workingwithLists=new WorkingwithLists();
}
@Test
public void testListFunctions() throws Exception
{
when(a.size()).thenReturn(1000);
workingwithLists.ListFunctions();
}
}
我不确定你为什么要这样做,但要实现这一点,你必须将“列表 a”移动到 class 级别,以便“模拟”和 return 任何你想要的。 我有下面的例子,希望这有帮助:
import java.util.ArrayList;
import java.util.List;
public class WorkingwithLists{
List<String > a=new ArrayList<>();
public static void main(String[] args) {
}
public void ListFunctions(){
System.out.println(a.size());
}
}
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.List;
@RunWith(MockitoJUnitRunner.class)
public class WorkingwithListsTest{
@InjectMocks
WorkingwithLists workingwithLists;
@Mock
private List<String> a;
@Before
public void setup(){
Mockito.when(a.size()).thenReturn(1000);
}
@Test
public void testListFunctions() throws Exception{
workingwithLists.ListFunctions();
Assert.assertTrue(true);
}
}
输出: