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

在测试期间使用@EventListener(Application ationReadyEvent.class)时防止方法运行

吴修洁
2023-03-14

我的项目中有以下测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class AddressParserTest {

    @Test
    public void parseAddressTest() {
        try {
          // my code
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

在我的项目中,我有一些方法是用@EventListener(ApplicationReadyEvent.class)注释的,这些方法在Spring启动后运行

@Component
public class MyClass {

    @EventListener(ApplicationReadyEvent.class)
    public void myMethod() {
       //my code
    }
}

当我运行AddressParserTest时,myMethod方法也会运行,因为EventListener(ApplicationReadyEvent.class)是否有任何方法可以阻止它在测试期间运行?

共有1个答案

艾原
2023-03-14

在这种情况下,您可以使用配置文件。

  • 用个人资料注释你的班级(请注意“!”在“测试”前面。这意味着:仅当配置文件不是“test”时才加载此类
@Component
@Profile("!test")
public class MyClass {

    @EventListener(ApplicationReadyEvent.class)
    public void myMethod() {
       //my code
    }
}
  • 用ActiveProfiles(“test”)注释测试类
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class AddressParserTest {

    @Test
    public void parseAddressTest() {
        try {
          // my code
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

希望有帮助!

 类似资料:
  • 我有一些使用Calendars编写的旧的方便方法,我想更新它们以使用Java8中引入的Java.time.*类。我类中的一些方法获取当前时间甚至只是当前小时的数量。 我计划为每个方法编写两个变体:一个假设时区是这台计算机上定义的默认时区,另一个允许用户指定所需的时区。 我想弄清楚两件主要的事情: 如何在我的方法中获取当前时间戳 如何使用不同的当前时间戳源对结果进行单元测试 关于方法本身,我倾向于创

  • 问题内容: 我正在使用Hibernate / Spring / Maven / MySQL和JUnit进行单元测试。直到昨天,即使测试运行完成,我的测试数据仍保留在数据库中。我从今天开始进行了配置,每次测试运行后突然删除了所有数据。可以肯定的是,这不是错误,而是配置问题。然而,我迷路了。 appContext.xml: persistence.xml: 感谢您的建议。 编辑----根据需要,测试用

  • 目标:独立并行地运行两个类,每个测试将方法名存储到一个变量中,该变量可以在测试中稍后访问。 问题:当测试并行运行时,它们开始在它们之间共享数据,从而损坏测试。 如果您看到控制台输出,这是错误的: 因为这是两个独立的类和方法正在运行。我在这里设置了正确的名字: 输出应该是这样的: 种皮 } 测试B } 帮助者方法 Testng.xml 控制台输出

  • 我有一个Mapstruct映射器,在那里我必须做一些字符串转换服务。即,从自然语言短语列表到实用程序类中定义的不透明常量。不,我这次不使用枚举。它涉及一些Levenshtein检查和预定义的单词列表。 我在Spring bean中有一个方法,我想使用它来映射我的DTO中的单个字符串字段。 如果我在映射中使用Mapstruct的uses属性,我发现Mapstruct会滥用definedBean。ge

  • 我可以成功地构建和运行我的Android应用程序在我的调试和发布变体没有问题。然而,当我尝试运行我的新单元测试时(我以前从来没有过),我得到了可怕的DexIndexOverflowException。我怀疑不是与我的单元测试一起运行的,而是与我的正常调试和发布构建类型一起运行的。 在单元测试运行配置中运行需要做什么?我搜索了Gradle文档、文档和Android Studio文档,但什么也没有找到

  • 我最近遇到了这个精彩的cpp2015演讲cppCon 2015:钱德勒·卡鲁斯“调整C:基准、CPU和编译器!哦,天哪!” 提到的防止编译器优化代码的技术之一是使用以下函数。 我在努力理解这一点。问题如下。 1)逃避比重击有什么好处? 2) 从上面的例子来看,clobber()似乎可以防止前面的语句(push_back)以这种方式进行优化。如果是这样,为什么下面的代码片段不正确? 如果这还不够混乱