这就是我为测试写的。
public class TaskServiceTest {
//Creation Test
@Test
@DisplayName("Task Creation")
void testTaskServiceClass() {
TaskService.addTask("Task Name", "Task Description");
assertTrue(TaskService.taskList.get(0).getId().equals("1000000001"));
assertTrue(TaskService.taskList.get(0).getName().equals("Task Name"));
assertTrue(TaskService.taskList.get(0).getDescrip().equals("Task Description"));
}
//Deletion Test
@Test
@DisplayName("Deletion Test")
void testTaskServiceDelete() {
TaskService.addTask("Task Service", "Testing Task Service");
int size = TaskService.taskList.size();
TaskService.deleteTask("1000000002");
assertTrue(TaskService.searchTask("1000000002") == 2);
}
//Test- update name
@Test
@DisplayName("Update name")
void testTaskServiceUpdateName() {
TaskService.addTask("Test 1", "Description");
int size = TaskService.taskList.size();
System.out.println(TaskService.taskList.get(size - 1).getId());
System.out.println(TaskService.taskList.get(size - 1).getName());
TaskService.updateName("1000000002", "Update Name");
System.out.println(TaskService.taskList.get(size - 1).getName());
assertTrue(TaskService.taskList.get(size - 1).getDescrip().equals("Update Name"));
}
//Test- update description
@Test
@DisplayName("Update Description")
void testTaskServiceUpdateDescrip() {
TaskService.addTask("Test 1", "testing description");
int size = TaskService.taskList.size();
System.out.println(TaskService.taskList.get(size - 1).getId());
System.out.println(TaskService.taskList.get(size - 1).getDescrip());
TaskService.updateDescrip("1000000002", "testing update description");
System.out.println(TaskService.taskList.get(size - 1).getDescrip());
assertTrue(TaskService.taskList.get(size - 1).getDescrip().equals("testing update description"));
}
// test- unique id
@Test
@DisplayName("Unique Id")
void testTaskServiceUniqueId() {
Task newTask = new Task("12345", "New Task", "Testing for unique Id");
TaskService.addTask(newTask);
Task duplicateId = new Task("12345", "New Task", "Testing for Id");
Assertions.assertThrows(IllegalArgumentException.class, () -> {
TaskService.addTask(duplicateId);
});
}
}
任何指导都非常受欢迎我尝试在我的测试中添加订单,以防删除测试影响另一个测试,但似乎不起作用。
junit测试应该是独立的junit选择自己运行您的测试方法的顺序。这是很好的,因为它鼓励我们以某种方式编写测试,以便它们彼此独立,这反过来又可以更轻松地孤立地阅读和分析每个测试。包括弄清楚如果有的话会出问题。
在我的计算机上它首先运行
testTaskServiceDelete()
testTaskServiceUniqueId()
12345
。该测试添加了一个新任务,它获得了ID
12346
。然后,它试图删除具有ID1000000002
的任务。没有这样的任务,所以什么也不会发生。您可以考虑是否删除方法应返回
boolean
表示任务是否已被删除(在您的单元测试中检查预期的布尔值是否从该方法返回)。无论如何,当您搜索具有ID
1000000002
的任务时,找不到,并且按预期返回
2
。第三次测试是
testTaskServiceUpdateName()
。它失败了。它添加了一个具有ID12347
的任务。然后,它试图更新具有ID1000000002
任务的名称,但仍然不存在,因此什么也不会发生。它在列表中打印了列表中的最后一个任务的名称。然后,它断言此名称现在应该是Update Name
,并且由于不是测试而未能通过测试。
这里是您可以编写测试以独立于任务列表中的方法的一种方式:
Test 1
我省略了评论
Update Name
,因为每个人都可以从测试中的两个注释中读取相同的信息。正如Bjarne Streutrup所说,不要将信息放在评论中,您可以清楚地以编程语言本身陈述。我正在手动创建新任务,所以我知道它ID。我坚持任务,因此我还可以使用它来检查名称是否已更新,而无需访问服务中的任务列表,这确实违反了封装。我引入了一个有一个新更新名称的变量,因此我不需要重复(干燥,不要重复自己),因此我确定我正在测试正确的更新名称。最后,我使用
@Test
@DisplayName("Update name")
void testTaskServiceUpdateName() {
String nextUniqueId = TaskService.generateUniqueId();
Task newTask = new Task(nextUniqueId, "Test 1", "Description");
TaskService.addTask(newTask);
String updatedName = "Updated name";
TaskService.updateName(nextUniqueId, updatedName);
assertEquals(updatedName, newTask.getName());
}
而不是
//Test- update name
。阅读更清楚,更重要的是,如果测试失败,则可以提供更明显的失败消息,包括预期名称和实际名称。学习使用调试器
如果不使用调试器,我无法回答这个问题。您也应该学习如何使用一个,这将非常有帮助。