有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的测试在单次执行中运行时间小于1秒,而在maven构建中运行时间大于20秒?

我正在进行一个项目,其中有几个基于spring boot的集成测试,总共运行约5分钟。在尝试减少此运行时时,我注意到一个非常小且简单的测试需要约20秒。当“单独”运行时,只需不到一秒钟,这是我所期望的

其他测试都是带有注释的integrationtests,如:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@MockBean(value = SomeBean.class)
@MockMvcTest
@ContextConfiguration(initializers = someInitializer.class)

但是所讨论的测试没有这样的注释,不需要应用程序上下文,应该按照我的理解顺利快速地通过。它看起来像这样:

public class SomeUnitTest{

    @Test
    public void testObjectOfClass(){
        SomeClass someClass= new SomeClass ("1", "2", "3", "4");

        SomeClass.assertThat(someClass).hasId("1-2-3-4");        
    }
}

谁能解释一下为什么测试会这样。即使我不能改变它,我也很想知道到底发生了什么


共 (1) 个答案

  1. # 1 楼答案

    我以前见过JUnit runner错误地计时的情况

    我有一个测试,它可以自己运行亚秒,但在完整的测试运行中速度很慢。它将在测试之前立即运行,并带有一系列带有插件的设置&@在所有步骤之前。在深入研究之后,我发现计时器直到设置完成后才切换到下一个测试类

    如果其他测试有大量的测试前设置,您可能会看到相同的情况

    编辑:@BeforeAll的时间安排肯定不好

    public class TestA {
        @Test
        public void test() {
        }
    }
    
    public class TestB {
        @BeforeAll
        public static void before() throws InterruptedException {
            Thread.sleep(10000);
        }
        @Test
        public void test() {
        }
    }
    
    public class TestC {
        @BeforeAll
        public static void before() throws InterruptedException {
            Thread.sleep(10000);
        }
        @Test
        public void test() {
        }
    }
    

    enter image description here