gpt4 book ai didi

java - 模拟特定类对象 stub 失败的测试mockito

转载 作者:行者123 更新时间:2023-12-02 02:31:40 25 4
gpt4 key购买 nike

我正在读取一个填充我的类对象的 json 对象,因此我正在 mock 我的类对象,并且不确定哪种方法是最好的方法。这是我的方法:

    public List<Person> readFile(String filename) {
List<Person> list = new ArrayList<Person>();
JSONParser parser = new JSONParser();
int count = 0;

try {
Object obj = parser.parse(new FileReader(
filename));

JSONObject jsonObject = (JSONObject) obj;
JSONArray array = (JSONArray) jsonObject.get("people");
//System.out.println("Debug: " + array.size());
if(array != null) {
while (count < array.size()) {
Person person = new Person();
JSONObject people = (JSONObject) array.get(count);
person.setName((String) people.get("name"));
Long age = (Long) people.get("age");
person.setAge(Integer.valueOf(age.intValue()));
person.setSex((String) people.get("sex"));
person.setIllness((String) people.get("illness"));
list.add(person);
count++;
}
}

} catch (Exception e) {
e.printStackTrace();
}
return list;
}

这需要一个文件名并返回一个列表,在本例中是一个特定的文件对象列表。这是我到目前为止的测试:

package pricing;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;

import com.pricing.DiscountPricing;
import com.pricing.model.Person;

@SuppressWarnings("deprecation")
public class DiscountPricingTest {

private static DiscountPricing mockDPclass;
private static Person mockPerson1;
private static Person mockPerson2;
private static Person mockPerson3;

@BeforeClass
public static void setUp() {
mockDPclass = mock(DiscountPricing.class);
mockPerson1 = new Person(50, "Allergies", "Kelly", "female");
mockPerson2 = new Person(40, "Sleep Apnea", "Josh", "male");
mockPerson3 = new Person(20, "Heart Disease", "Brad", "male");
}

@Test
public void readFileTest() {
String filename = "Consumers.json";
DiscountPricing dpclass = new DiscountPricing();
List<Person> allPeople = dpclass.readFile(filename);
List<Person> mockPeople = new ArrayList<Person>();
mockPeople.add(mockPerson1);
mockPeople.add(mockPerson2);
mockPeople.add(mockPerson3);
assertEquals(mockPeople.size(), allPeople.size());
assertTrue(allPeople.get(0).getName().equals("Kelly"));
}
}

看看我对 Mockito 的模拟使用是否正确?

最佳答案

您还没有 mock 您想要测试的类。即:mockedYourClass = mock(YourClass.class);。您应该在测试类的 setUp() 方法中执行此操作。

此外,在测试之前,您不会使用模拟数据对模拟类的方法进行 stub ,即:when(mockDPclass.readFile("Consumers.json")).thenReturn(Arrays.asList(mockPerson1,mockPerson2,mockPerson3));您应该将其放在 setUp() 方法的末尾。

在 readFileTest() 方法中,您可以执行以下操作:

List<Person> persons = mockDPclass.readFile("Consumers.json");
assertEquals(3, persons.size());
Person person = persons.get(0);
assertEquals("Kelly", person.getName());

这是一个很好的教程,如何开始在 java 中进行模拟:https://dzone.com/articles/getting-started-mocking-java

关于java - 模拟特定类对象 stub 失败的测试mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com