java - 在某些情况下我应该如何使用模拟?
问题描述
假设有如下类:
CivilAddSystem 类:
class CivilAddSystem{
List<People> people = new ArrayList<>();
List<Town> towns = new ArrayList<>();
public People addPeople(People people) {
people.add(people);
return people;
}
public Town addTown(Town town) {
towns.add(town);
return town;
}
public House addHouse (House house, String townName) throws IllegalStateException {
Town town = getTown(townName);
if (null == town) throw new IllegalStateException("No matching town");
town.addHouse(house);
return house;
}
public List<String> getTown(String name) {
for (Town town : towns) {
if (town.getName().equals(name)) return town;
}
return null;
}
}
镇级:
public class Town {
List<House> houses = new ArrayList<>();
String name;
String abbreviation;
public Town (String name, String abbreviation) {
this.name = name;
this.abbreviation = abbreviation;
}
public String getName() {
return name;
}
public String getAbbreviation() {
return abbreviation;
}
public void addHouse(House house) {
houses.add(house);
}
public House getHouse(String unitNumber) {
for (House house : houses) {
if (house.getUnitNumber().equals(unitNumber)) return house;
}
return null;
}
}
房屋类
public class House {
private final List<People> people = new ArrayList<>();
private final String unitNumber;
private final String houseName;
public House (String unitNumber, String houseName) {
this.unitNumber= unitNumber;
this.houseName= houseName;
}
public String getUnitNumber() {
return unitNumber;
}
public String getHouseName() {
return houseName;
}
private People checkMovedInPeople(People person) {
if (null == person) throw new NullPointerException();
for (People movedIn : people) {
if (movedIn.getName().equals(person.getName())) return movedIn;
if (movedIn.getPersonID().equals(person.getPersonID())) return movedIn;
}
return null;
}
public void moveInPeople(People person) throws IllegalArgumentException, IllegalStateException {
if (null == person) throw new IllegalArgumentException("Person shouldn't be null");
if (null != checkMovedInPeople(person)) throw new IllegalStateException("Person is already in the house");
people.add(person);
}
public List<String> getPeople() {
List<String> results = new ArrayList<>();
for (People person: people) {
results.add(person.getPersonID());
}
return results;
}
public People getPerson(String match) {
for (People person: people) {
if (person.getPersonID().equals(match)) return person;
if (person.getName().equals(match)) return person;
}
return null;
}
}
而对于people 类,它只有两个变量:String PersonID 和 String Name 以及它们的 getter 方法。
所以,我想要实现的是,我目前正在尝试测试 CivilAddSystem 类中的 addPeople 方法,并且我想使用 mockito 独立测试它。
我使用 JUnit 编写的测试用例是这样的:
@Test
public void testAddPeople() {
CivilAddSystem CAS = new CivilAddSystem();
Town town = CAS.addTown("BlueTown", "BT");
House house = CAS.addHouse("U180", "BlueHouse", "BlueTown");
People bob = CAS.addPeople("1", "Bob");
Assert.assertEquals(CAS.getTown("BlueTown").getHouse("U180").getPerson("1"), null);
house.moveInPeople(bob);
Assert.assertEquals(CAS.getTown("BlueTown").getHouse("U180").getPerson("1").getPersonID, 1);
}
但我真的很难为这个测试用例应用 mockito。
到目前为止,我所做的只是嘲笑 Town、House 和 People 类(不是 CivilAddSystem 类,因为它是正在测试的类),然后停在那里......
谁能给我一个关于如何为上述测试用例应用 mockito 的提示?
ps) 对上面的代码进行一些修改是可以接受的(例如,应用依赖注入和类似的东西是可以接受的)。
提前致谢!
解决方案
推荐阅读
- python - 将 Dask 系列编入索引可归还 Dask 系列
- reactjs - 通过 GitLab 在 Firebase 上部署 React 应用程序时出现“eslint:权限被拒绝”
- javascript - Bugsnag 错误 UnhandledRejection - 拒绝原因不是错误
- c - 使用变量作为函数参数和直接使用字符串作为函数参数有什么区别?
- c#-4.0 - c#将数组中的随机结果分配给变量返回超出范围的错误
- r - 将 ascii 或二进制网格数据导入 R
- react-native-firebase - 使用 Firebase 将 React Native Firebase 集成到现有的 iOS 应用程序中
- php - 如何在 Laravel Blade 中添加多个子行数据和父行
- c# - 如何在 Entity Framework 6 中创建字段并从连接表中获取数据
- python-3.x - 从 .csv 导入 Dataframe 导入为 OBJECT 而不是 FLOAT