gpt4 book ai didi

java - spring-boot 应用程序中的缓慢单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:57 24 4
gpt4 key购买 nike

我对单元测试还是个新手。我开始读一本关于它的书。但最重要的事情之一是必须首先进行测试(快速、隔离、可重复、 self 验证、及时)。

好的,现在我已经准备好进行一些练习了。但是当我在 spring boot 中构建单元测试时。我喜欢将它们分开。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = UnitTestApplication.class, loader = SpringApplicationContextLoader.class)
@WebIntegrationTest("server.port:9000")
public class FirstTestClassTest{

...

}


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = UnitTestApplication.class, loader = SpringApplicationContextLoader.class)
@WebIntegrationTest("server.port:9001")
public class SecondTestClassTest{

...

}

这给我带来了一个问题,即对于每个测试类,都有一个应用程序的新实例启动。

假设我引入了一项新功能并想测试错误。我在命令行中使用 mvn test 。然后运行所有测试,但我认为对于具有大量测试的真实应用程序来说需要很长时间。

我有一种方法可以只启动一个实例并保持快速测试,但是我可以在哪里将测试保持在单独的类中?

最佳答案

我会引用你的句子:

So let's say I introduce a new feature and want to test for bugs. I use mvn test form the command line. Then all the test are run but i think it will take ages for a real application with a lot of tests.

您在这里提出的这个问题非常重要,因此我将在此处尝试提供架构观点,而不会深入研究技术实现。

有许多不同种类的测试。您所指的称为集成测试,而不是单元测试。这两者之间的区别在于,在单元测试中,您正在测试一个类,其余所有类都应该被模拟(为此有 EasyMock 或 Mockito 等框架)。

单元测试有很多限制:

  • 您不能访问任何外部组件(网络服务器、数据库等)
  • 单元测试只在内存中运行
  • 它们非常快(秒的粒子)。

这些测试在测试类的功能时非常有用

现在功能开发完成后,就可以测试该功能在“半真实”环境中的工作情况了。通常在运行这些时,有一个可用的数据库以及 spring 容器。要运行此类测试,您可以使用 spring 测试扩展并使用不同的技术(例如,将整个应用程序 spring 上下文替换为“部分”上下文或用 stub 或其他东西覆盖一些 bean。

现在,这种差异在您的问题的上下文中很有趣,因为应用程序中应该有很多单元测试和更少的集成测试。因此,如果您可以用单元测试覆盖您编写的内容 - 编写单元测试。它本质上非常快,您可以立即运行很多(数千个)。仅当您(很少)无法在单元测试中涵盖您的功能时 - 编写集成测试。例如,这通常与针对数据库运行的代码相关,并且您想测试组件生成的查询是否真正有效。

所以一般来说,如果你有两种类型的测试,你应该被覆盖,并且应该没有那么多集成测试,所以运行这些测试应该不是真正的麻烦。

关于java - spring-boot 应用程序中的缓慢单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37772538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com