junit测试失败

问题描述 投票:0回答:1

这就是我为测试写的。

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选择自己运行您的测试方法的顺序。这是很好的,因为它鼓励我们以某种方式编写测试,以便它们彼此独立,这反过来又可以更轻松地孤立地阅读和分析每个测试。包括弄清楚如果有的话会出问题。

在我的计算机上它首先运行
java testing junit5
1个回答
0
投票
,它通过。 next它运行

testTaskServiceDelete()

。它通过了,但不是出于您预期的原因。从

testTaskServiceUniqueId()

中有一个任务,其中有ID

12345

。该测试添加了一个新任务,它获得了ID
12346

。然后,它试图删除具有ID

1000000002

的任务。没有这样的任务,所以什么也不会发生。您可以考虑是否删除方法应返回
boolean
表示任务是否已被删除(在您的单元测试中检查预期的布尔值是否从该方法返回)。无论如何,当您搜索具有ID
1000000002
的任务时,找不到,并且按预期返回
2
第三次测试是
testTaskServiceUpdateName()
。它失败了。它添加了一个具有ID
12347
的任务。然后,它试图更新具有ID
1000000002
任务的名称,但仍然不存在,因此什么也不会发生。它在列表中打印了列表中的最后一个任务的名称。然后,它断言此名称现在应该是
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
。阅读更清楚,更重要的是,如果测试失败,则可以提供更明显的失败消息,包括预期名称和实际名称。
学习使用调试器
如果不使用调试器,我无法回答这个问题。您也应该学习如何使用一个,这将非常有帮助。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.