当前位置: 首页 > 知识库问答 >
问题:

用JUnit编写系统测试

计承德
2023-03-14

我是故意在谈论系统测试。我们确实有一套相当详尽的单元测试,其中一些使用了模拟,而这些测试不会去任何地方。系统测试应该是对单元测试的补充,因此,模拟不是一种选择。

如果我将@beforeall替换为一个test-method(让我们称之为@test public void boot(){...}),并引入一个顺序依赖项(使用JUnit 5非常容易),它强制boot在运行任何其他测试之前运行,那么这些问题就会消失。

到目前为止还好!这看起来和工作很好。当测试不是由CI服务器执行,而是由试图排除故障的开发人员执行时,实际问题就开始了。当我尝试启动一个测试时,boot被从测试执行中筛选出来,测试失败。

在Junit5中对此有什么解决方案吗?还是我应该采取完全不同的方法?

我怀疑使用@testtemplate可能有一个解决方案,但我真的不知道如何进行。另外,afaik只允许我生成新的命名测试,将被过滤以及。我必须编写一个自定义测试引擎吗?这似乎并不引人注目。

共有1个答案

夏高朗
2023-03-14

这个更一般的测试问题与JUnit5有关。为了跳过很长时间的启动,如果可能的话,可以模拟一些组件。将引导系统作为测试是没有意义的,因为还有其他测试依赖于此。在这种情况下最好像以前一样使用@Beforeall。对于测试启动,您可以为那些完全独立于其他测试运行的测试类创建单独的测试类。另一种选择是将此类测试分组,并将其与普通单元测试分开,仅在需要时运行(例如,在CI服务器上部署之前)。这实际上取决于具体的用例,以及这些测试是否是本地机器上常规构建的一部分。

第三个选择是尽可能减少引导时间。如果您不能使用模拟/存根或从常规构建中排除这些测试,则可以选择此选项。

 类似资料:
  • 我需要为一个设计糟糕的旧应用程序编写JUnit测试,该应用程序正在向标准输出写入大量错误消息。当方法正确运行时,它将返回一个XML响应: 但当它得到格式错误的XML或不理解请求时,它会返回,并将一些内容写入标准输出。 在JUnit中是否有任何方法断言控制台输出?要捕获以下情况:

  • customer-Mapper.xml daoimpl.java

  • 请注意,我没有访问实际的代码在一个地方,我可以张贴它。 此外,我也限于(由于不幸的原因)使用Spring 3.0.5或3.1.2。

  • 问题内容: 这是我使用的文件: component.xml ServiceImpl.java ServiceImplTest.java 错误: 问题答案: 确保已导入正确的程序包。如果我正确地记住,有两种不同的自动布线套件。应该 : 这对我来说也很奇怪: 这是一个适合我的示例:

  • 我想用mock它来模拟下面代码中的数据源对象,但每次我都得到空指针异常。 我试过嘲笑数据源和连接,但似乎什么都不起作用。

  • 以下是我使用的文件: 组成部分xml 服务我mpl.java est.java 错误: