当前位置: 首页 > 面试题库 >

如何使用参数化运行JUnit SpringJUnit4ClassRunner?

臧兴学
2023-03-14
问题内容

由于重复的@RunWith注释,以下代码无效:

@RunWith(SpringJUnit4ClassRunner.class)
@RunWith(Parameterized.class)
@SpringApplicationConfiguration(classes = {ApplicationConfigTest.class})
public class ServiceTest {
}

但是,如何结合使用这两个注释?


问题答案:

至少有两个选项可以做到这一点:

  1. 以下http://www.blog.project13.pl/index.php/coding/1077/runwith-junit4-with-both-springjunit4classrunner-and-parameterized/

您的测试需要看起来像这样:

         @RunWith(Parameterized.class)
     @ContextConfiguration(classes = {ApplicationConfigTest.class})
     public class ServiceTest {

         private TestContextManager testContextManager;

         @Before
         public void setUpContext() throws Exception {
             //this is where the magic happens, we actually do "by hand" what the spring runner would do for us,
            // read the JavaDoc for the class bellow to know exactly what it does, the method names are quite accurate though
           this.testContextManager = new TestContextManager(getClass());
           this.testContextManager.prepareTestInstance(this);
         }
         ...
     }
  1. 有一个github项目https://github.com/mmichaelis/spring-aware-rule,它建立在以前的博客上,但是以一种通用的方式添加了支持
        @SuppressWarnings("InstanceMethodNamingConvention")
    @ContextConfiguration(classes = {ServiceTest.class})
    public class SpringAwareTest {

        @ClassRule
        public static final SpringAware SPRING_AWARE = SpringAware.forClass(SpringAwareTest.class);

        @Rule
        public TestRule springAwareMethod = SPRING_AWARE.forInstance(this);

        @Rule
        public TestName testName = new TestName();

        ...
    }

因此,您可以让一个基本类实现其中一种方法,并从中继承所有测试。



 类似资料:
  • 问题内容: 标准接口只有非参数化方法。也有接口与泛型类型的方法返回结果。我需要传递通用参数,如下所示: 是否有用于此目的的标准接口,或者我必须自己声明该基本接口? 问题答案: 通常,您将实现或作为支持通用输入参数的类;例如

  • 我有一个管道,我刚刚添加了2个参数来构建发布或调试(参数称为发布或调试)。管道使用cron语法每10分钟检查一次SCM中的更改,管道检查每次提交,然后构建发布(C程序),但我想每天构建调试一次,比如说每天从12到13的每个提交都将在调试中构建。所有这些都不需要我运行管道和手动更改参数(默认设置为release)。有什么办法可以做到这一点?这是管道的一个非常简短的版本:

  • 我有一个类似这样的pytest测试: 现在,作为重构的一部分,我移动了这一行: 放入它自己的夹具中(在conftest.py文件中),因为它在其他地方使用。但是,除了直接导入fixture函数外,是否有其他方法在测试中引用它?我知道funcargs通常是调用fixture的方式,但是在本文中,当我想要调用fixture时,我不在测试函数中。

  • 问题内容: 我想在gradle中定义一个任务(称为),该任务运行gradle任务,但具有的固定值。我也希望以后可以使用原始任务。 我的问题是,我无法转移清单的设置。 我累了 我以为我要通过对archiveName和manifest使用其他值来重新定义任务。 运行时会生成一个可执行的JAR文件。 运行时会生成一个jar文件。不幸的是,当尝试使用我运行程序时,出现错误消息: java -jar bui

  • 因此,我的实体包含不同语言的名称,我希望将它映射到给定的 这是我的映射器类 现在我的问题是,我应该如何注释我的映射方法,以便它将理解为我的源对象,方法理解为字段的映射方法,方法的参数?

  • 问题内容: Jenkins允许您对构建进行参数化,但是我不知道如何实际使用它: 假设我通常会像下面这样从命令行启动我的Ant构建: 这将调用build.xml的package目标,并为其提供名为的属性packageType,其值为jar。 我假设在上面的屏幕截图中,“ 名称”字段是我要 指定的位置packageType,但是值呢? 如果Jenkins希望我为该属性指定默认值,那么在哪里可以指定项目