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

使用JUnit4,我可以参数化@BeforeClass吗?

翟迪
2023-03-14

我正在使用jUnit为访问数据库的应用程序管理集成测试。因为设置测试数据是一个耗时的操作,所以我一直在使用@BeforeClass方法,它只在每个测试类中执行一次(而不是@Before方法,它在每个测试方法中运行一次)。

现在,我想尝试数据层配置的几种不同排列,在每个不同的配置上运行我的所有测试。这似乎是参数化的测试运行程序的自然使用。问题是,参数化的向类构造函数提供参数,@BeforeClass方法是抽象的,在类构造函数之前被调用。

几个问题,

参数化是否为每个参数排列调用@BeforeClass方法,还是只调用一次?

如果反复调用@BeforeClass方法,是否有办法从内部访问参数值?

如果这些都没有,人们建议什么是解决这个问题的最佳替代方法?

共有3个答案

长孙高远
2023-03-14

您可以在测试类的构造函数中调用这个初始化逻辑。跟踪静态变量中使用的最后一个参数。当它发生变化时,为新参数设置类。

我想不出一个下课的等价物。

井礼骞
2023-03-14

@在您的示例中,BeforeClass只调用一次。这个名字很有道理——上课前!

如果您的测试需要不同的数据,我可以想到两种选择:

  1. 将数据设置在@之前,以便它是特定于测试的
  2. 将要使用相同数据运行的测试分组到单独的测试类中,并对每个测试类使用@BeforeClass。
周奇文
2023-03-14

我想你需要一个定制的测试跑步者。我遇到了与您相同的问题(需要使用多个昂贵的配置运行相同的测试)。您需要一种方法来参数化设置,也许可以使用@Parameter注释,类似于参数化运行程序所使用的注释,但是在静态成员字段而不是实例字段上。自定义运行程序必须找到带有@Parameter注释的所有静态成员字段,然后对每个静态@Parameter字段运行一次测试类(可能使用基本的BlockJunit4ClassRunner)。@Parameter字段可能应该是@ClassRule。

Andy on Software在开发定制测试跑步者方面做得很好,他在这里和这里的博客帖子中解释得非常清楚。

 类似资料:
  • 我正在编写一些从第三方库扩展类的JUnit测试。超级类扩展了,所以根据定义,我的子类也扩展了。 在我的子类中,我用前缀编写测试方法,然后执行这些方法。 但是,出于许多原因,我们希望转移到JUnit4(其中一个原因是,我们不希望必须在测试方法前缀) 我尝试过使用JUnit4注释简单地编写新测试,但这些方法没有得到执行。 例如: 不扩展第三方测试类不是一个选项。(值得注意的是,Spring的又扩展了其

  • 主要内容:1 参数化测试的介绍,2 使用@Parameter进行字段注入而不是构造函数,3 使用单个参数进行测试,4 识别单个测试用例1 参数化测试的介绍 自定义流道参数化实现参数化测试。运行参数化测试类时,将为测试方法和测试数据元素的叉积创建实例。 例如,要测试斐波那契函数,请编写: FibonacciTest的每个实例都将使用二元参数构造函数和方法中的数据值构造 @Parameters 。 2 使用@Parameter进行字段注入而不是构造函数 也可以将数据值直接注入字段中,而无需使用@Pa

  • 使用GoSQL库,我们可以使用以下参数创建SELECT、INSERT、UPDATE和DELETE语句: 我想从用户提供的描述表结构的输入中创建表,用户将被要求输入表的名称以及他们想要创建的每个列的名称和类型。但是,在查询接口中构建CREATE语句通过将字符串连接在一起创建CREATE语句是可行的,但这是一种等待发生的SQL注入攻击。 有没有一种方法可以使用Go SQL库参数化CREATE语句?

  • 是否可以将特征作为参数传递给这样的泛型函数? 这会产生以下错误: 也就是说,是否可以接受一个trait作为泛型参数,以便它可以返回该trait的iterable?我一直在寻找答案,但现在我觉得我可能问错了问题。 背景是这样的。我有一个结构,有几个不同具体类型的向量,它们都实现了相同的特性。我希望结构的impl有一个函数,可以返回所有存储对象上的iterable作为它们的任何共同特征。上面的是该(概

  • 问题内容: 我有这样的看法: 我想使其更通用,这意味着将2更改为变量。我尝试了这个: 但是MySQL不允许这样做。 我发现了一个丑陋的解决方法: 然后视图是: 但是它看起来确实很糟糕,用法也很糟糕-我必须在每次使用视图之前设置@MyVariable。 有没有一种解决方案,我可以这样使用: 具体情况如下:我有一个表,用于存储有关拒绝请求的信息: 多重性是在同一秒内记录的多个相同请求。我想显示一个拒绝

  • 问题内容: 我正在尝试将使用Core Data的项目从Objective-C转换为Swift。 数据模型的结构使得我拥有一个包含其他文件夹的主文件夹-这些文件夹也可以通过“ parentFolder”关系包含其他文件夹。 当前,我在Objective-C中执行此操作以检索主文件夹(它找到唯一一个没有“ parentFolder”的文件夹,并且按预期工作): 在转换为Swift时,我想做同样的事情: