JUNIT测试时的java.lang.StackOverflower错误
我想学习如何创建单元测试。我以前从未这样做过,所以我阅读了一些教程,并尝试测试我的addTraining to Day方法。但是当我使用我的测试方法时(在我看来,我写的是正确的方法),我有java.lang.StackOverflowerr。有人能帮我吗?我不知道该怎么办 这是我想要测试的方法,我想我必须创建三个案例来测试这个方法,对吗JUNIT测试时的java.lang.StackOverflower错误,java,unit-testing,testing,junit,Java,Unit Testing,Testing,Junit,我想学习如何创建单元测试。我以前从未这样做过,所以我阅读了一些教程,并尝试测试我的addTraining to Day方法。但是当我使用我的测试方法时(在我看来,我写的是正确的方法),我有java.lang.StackOverflowerr。有人能帮我吗?我不知道该怎么办 这是我想要测试的方法,我想我必须创建三个案例来测试这个方法,对吗 public void addTraining(String userId, Training training, LocalDate localDat
public void addTraining(String userId, Training training, LocalDate localDate) {
Day activityBoardDay = getActivityBoardDay(localDate, userId);
List<Training> trainingList = activityBoardDay.getTrainings();
if (trainingList == null || trainingList.isEmpty()) {
activityBoardDay.setTrainings(Collections.singletonList(training));
} else {
trainingList.add(training);
activityBoardDay.setTrainings(trainingList);
}
activityBoardDay.setTrainings(trainingList);
}
public void addTraining(字符串userId,Training Training,LocalDate LocalDate){
Day activityBoardDay=getActivityBoardDay(localDate,userId);
List trainingList=activityBoardDay.getTrainings();
if(trainingList==null | | trainingList.isEmpty()){
activityBoardDay.setTrainings(集合.单音列表(培训));
}否则{
培训列表。添加(培训);
活动BoardDay.setTrainings(培训列表);
}
活动BoardDay.setTrainings(培训列表);
}
这是我的测试课:
@RunWith(MockitoJUnitRunner.class)
public class ActivitiesServiceTest {
@Mock
private DbService databaseControllerMock;
private ActivitiesService activitiesService;
private String userId = "test";
@Before
public void setUp() throws Exception {
activitiesService = new ActivitiesService(databaseControllerMock);
}
@After
public void tearDown() throws Exception {
getDayWithNulls().setTrainings(null);
getDayWithNulls().setMeasurements(null);
getDayWithNulls().setTrainingCycles(null);
getDayWithNulls().setDiets(null);
getDayWithNulls().setMeals(null);
getDayWithNulls().setLocalDate(LocalDate.now());
}
@Test
public void addTraining() {
//WITH NULLS
getDayWithNulls();
activitiesService.addTraining(userId, getTrainingForTest(), LocalDate.now());
Assert.assertEquals(getDayWithNulls(), expectedDayWithAddedTrainingToNulls());
}
private Exercise getSquatExcercise() {
Exercise exercise = new Exercise();
exercise.setId("1");
exercise.setName("Squat");
exercise.setDescription("How to squat properly?");
exercise.setCalories(3);
exercise.setNotes("Calories per one squat");
return exercise;
}
private Exercise getRunExcercise() {
Exercise exercise = new Exercise();
exercise.setId("2");
exercise.setName("Run");
exercise.setDescription("How to run properly?");
exercise.setCalories(3);
exercise.setNotes("Calories per one running session");
return exercise;
}
private Exercise getWalkExcercise() {
Exercise exercise = new Exercise();
exercise.setId("3");
exercise.setName("Walk");
exercise.setDescription("How to walk properly?");
exercise.setCalories(3);
exercise.setNotes("Calories per one walking session");
return exercise;
}
private Training getTrainingForTest() {
Training training = new Training();
List<Exercise> exercises = new ArrayList<>();
exercises.add(getRunExcercise());
exercises.add(getSquatExcercise());
exercises.add(getWalkExcercise());
training.setExerciseList(exercises);
return training;
}
private Day getDayWithNulls() {
getDayWithNulls().setTrainings(null);
getDayWithNulls().setMeasurements(null);
getDayWithNulls().setTrainingCycles(null);
getDayWithNulls().setDiets(null);
getDayWithNulls().setMeals(null);
getDayWithNulls().setLocalDate(LocalDate.now());
return getDayWithNulls();
}
private Day expectedDayWithAddedTrainingToNulls() {
expectedDayWithAddedTrainingToNulls().setTrainings(Collections.singletonList(getTrainingForTest()));
expectedDayWithAddedTrainingToNulls().setMeasurements(null);
expectedDayWithAddedTrainingToNulls().setTrainingCycles(null);
expectedDayWithAddedTrainingToNulls().setDiets(null);
expectedDayWithAddedTrainingToNulls().setMeals(null);
expectedDayWithAddedTrainingToNulls().setLocalDate(LocalDate.now());
return expectedDayWithAddedTrainingToNulls();
}
}
@RunWith(MockitoJUnitRunner.class)
公共类活动服务测试{
@嘲弄
私有DbService databaseControllerMock;
私人活动服务;
私有字符串userId=“test”;
@以前
public void setUp()引发异常{
activitiesService=新的activitiesService(databaseControllerMock);
}
@之后
public void tearDown()引发异常{
getDayWithNulls().setTrainings(null);
getDayWithNulls().setMeasurements(null);
getDayWithNulls().setTrainingCycles(null);
getDayWithNulls().setDiets(null);
getDayWithNulls();
getDayWithNulls().setLocalDate(LocalDate.now());
}
@试验
公共培训(){
//带空值
getDayWithNulls();
activitiesService.addTraining(userId,getTrainingForTest(),LocalDate.now());
Assert.assertEquals(getDayWithNulls(),expectedDayWithAddedTrainingToNulls());
}
私人健身操{
练习=新练习();
行使setId(“1”);
练习。设置名称(“下蹲”);
练习.setDescription(“如何正确下蹲?”);
运动。设定热量(3);
运动记录(“每次下蹲的卡路里”);
复训;
}
私人练习GetRunExercise(){
练习=新练习();
行使setId(“2”);
练习。设置名称(“运行”);
练习.setDescription(“如何正确运行?”);
运动。设定热量(3);
运动记录(“每次跑步的卡路里”);
复训;
}
私人练习GetWalkExercise(){
练习=新练习();
行使setId(“3”);
练习。设定名称(“行走”);
练习.setDescription(“如何正确行走?”);
运动。设定热量(3);
运动记录(“每次步行的卡路里”);
复训;
}
私人培训getTrainingForTest(){
培训=新培训();
列表练习=新建ArrayList();
添加(getrunexercise());
添加(GetShuckExercise());
添加(getwalkexercise());
培训。设置练习表(练习);
返乡培训;
}
私人日getDayWithNulls(){
getDayWithNulls().setTrainings(null);
getDayWithNulls().setMeasurements(null);
getDayWithNulls().setTrainingCycles(null);
getDayWithNulls().setDiets(null);
getDayWithNulls();
getDayWithNulls().setLocalDate(LocalDate.now());
返回getDayWithNulls();
}
预计每天的私人日,增加培训次数(){
expectedDayWithAddedTrainingToNulls().setTrainings(Collections.singletonList(getTrainingForTest());
expectedDayWithAddedTrainingToNulls().setMeasurements(null);
expectedDayWithAddedTrainingToNulls().setTrainingCycles(null);
expectedDayWithAddedTrainingToNulls().setDiets(null);
expectedDayWithAddedTrainingToNulls().SetFines(null);
expectedDayWithAddedTrainingToNulls().setLocalDate(LocalDate.now());
返回ExpectedDay和AddedTrainingTonulls();
}
}
getDayWithNulls()
正在调用自身,这会导致无限递归和堆栈溢出错误getDayWithNulls()
可能应该调用其他方法来生成它返回的Day
实例
private Day getDayWithNulls() {
Day day = ... // call some method to create a Day instance,
// but don't call getDayWithNulls() !
day.setTrainings(null);
day.setMeasurements(null);
day.setTrainingCycles(null);
day.setDiets(null);
day.setMeals(null);
day.setLocalDate(LocalDate.now());
return day;
}
堆栈跟踪在哪里?@Eran在getDayWithNulls()行中。setTrainings(null);