如何在Java中使用Junit和Mockito进行单位测试
#测试 #java #junit #mockito

最初发布在whathebea.github.io上,于23/10/2022

我知道今天是星期天,但我真的很想写东西。似乎我不能停止考虑编码并尝试完善我正在学习的一切。这可能是个人的,但是,其他人是否有这种感觉?在实习之前,尽管我非常敬业,但似乎现在我更加专注了。另外,我连续输掉了两场瓦尔兰特比赛,所以我感到有些沮丧。也许写帖子是一种分散自己的损失的方式...

好,所以今天我决定谈论测试。回答“为什么测试如此重要?”我问自己,谈论工具和更多事情。

为什么测试很重要?

想象您写了一些代码,然后有人更改了一些代码。如果您准备好测试,则很容易知道该代码是否仍然按预期工作。如果您没有测试,则必须手动测试代码。这很耗时,而且很容易错过一些东西,这很昂贵,尤其是如果您正在从事一个大项目。

朱尼特

什么是junit? junit是Java的单位测试框架。它用于测试最小的代码单位,这是一种方法。

这是Junit测试的示例:

@Test
public void testAdd() {
    int result = calculator.add(1, 2);
    assertEquals(3, result);
}

当您进行测试时,必须使用@Test注释。 assertEquals方法用于检查该方法的结果是否与预期结果相同。如果结果与预期结果不同,则测试将失败。
这是一个将失败的测试:

@Test
public void testAdd() {
    int result = calculator.add(1, 2);
    assertEquals(4, result);
}

失败,因为1+2不等于4。

摩根托

什么是Mockito? Mockito是Java的模拟框架。它用于模拟您正在测试的类的依赖项。

要使用Mockito,您必须使用@mock和@InjectMocks注释。 @mock注释用于创建模拟对象。 @InjectMocks注释用于将模拟对象注入您正在测试的类中。这是一个完整的示例:

@ExtendWith(MockitoExtension.class)
public class UserServiceTest {
    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserService userService;

    @Test
    public void testGetUserById() {
        User user = new User();
        user.setId(1);
        user.setName("Beatriz");

        when(userRepository.findById(1)).thenReturn(Optional.of(user));

        User result = userService.getUserById(1);

        assertEquals(user, result);
    }
}

在此示例中,我正在测试 getuserbyid uservice 类的方法。我嘲笑 userrepository 类,因为 uservice 类取决于 userrepository 类。当方法嘲笑 findbyid 方法时,我正在使用。我正在使用 theReturn 方法来指定 findbyid 方法将返回的内容。在这种情况下,它将返回包含用户对象的可选对象。我正在使用 assertequals 方法来检查 getuserbyid 方法的结果是否与预期的结果相同,即 user 对象我手动创建。

测试覆盖范围

测试覆盖范围是测试过程中执行多少行代码的量度。它用于测量测试多少代码。有不同类型的测试覆盖范围,但最常见的是线条覆盖率。它衡量测试期间执行了多少行代码。
IBM有一篇文章谈论如何查看您的Junit测试覆盖范围,您可以阅读here

TDD(测试驱动开发)

tdd意味着测试驱动的开发,名称本身是相当不言自明的。这是一个软件开发过程,依赖于非常短的开发周期的重复:要求将其转换为非常具体的测试用例,然后改进了该软件以通过新测试。
TDD有不同类型的类型,但最常见的是红绿色反对者循环。这是一个由三个步骤组成的周期:

  1. 写一个测试
  2. 运行测试
  3. 重构代码

因此,您几乎要编写测试,然后编写代码以进行测试。然后,您对代码进行重构,以使其更可读性和高效。 IBM关于TDD有很多免费内容,您可以阅读here

结论

我希望我的帖子有帮助!我觉得这确实可以帮助我写自己的知识。我必须稍微推动自己制作代码示例并写下它,但我认为这是值得的。希望您喜欢它,如果您有任何疑问或建议,请在评论中告诉我!感谢您的阅读!

资源