【问题标题】:Is there way to unit test validation annotations without having to use a dependency from glassfish?有没有办法在不必使用 glassfish 的依赖项的情况下对验证注释进行单元测试?
【发布时间】:2017-10-11 15:00:02
【问题描述】:

对于我创建的这个 MovieForm 类:

public class MovieForm {

  private String movieName;

  @Min(1)
  @Max(31)
  @NotNull
  private Integer maxNumberOfTickets;
}

我创建了这个单元测试来测试我的表单的验证注释。

public class MovieFormTest {

private static ValidatorFactory validatorFactory;
private static Validator validator;

@BeforeClass
public static void createValidator() {
    validatorFactory = Validation.buildDefaultValidatorFactory();
    validator = validatorFactory.getValidator();
}

@AfterClass
public static void close() {
    validatorFactory.close();
}

@Test
public void form_test() {
    MovieForm form = new MovieForm();
    form.setMaxNumberOfTickets(null);
    Set<ConstraintViolation<MovieForm>> violations = validator.validate(form);
    Assert.assertFalse(violations.isEmpty());
    ConstraintViolation<MovieForm> violation = violations.iterator().next();
    Assert.assertEquals("may not be null", violation.getMessage());

    form.setMaxNumberOfTickets(32);
    violations = validator.validate(form);
    Assert.assertFalse(violations.isEmpty());
    violation = violations.iterator().next();
    Assert.assertEquals("must be less than or equal to 31", violation.getMessage());

    form.setMaxNumberOfTickets(0);
    violations = validator.validate(form);
    Assert.assertFalse(violations.isEmpty());
    violation = violations.iterator().next();
    Assert.assertEquals("must be greater than or equal to 1", violation.getMessage());

    form.setMaxNumberOfTickets(15);
    violations = validator.validate(form);
    Assert.assertTrue(violations.isEmpty());
}

但是只有当我在我的 pom 中添加这个 glassfish 依赖项时,这个测试才有效

 <dependency>
   <groupId>org.glassfish</groupId>
   <artifactId>javax.el</artifactId>
   <version>3.0.1-b08</version>
 </dependency>

否则我会收到 HV000183: Unable to initialize 'javax.el.E​​xpressionFactory'. 错误。但是我的同事不希望我使用这个依赖项,因为我们正在使用 WebSphere,所以我的问题是:有没有办法让这个单元测试工作而不必使用那个依赖项?

【问题讨论】:

  • 您可以将&lt;scope&gt;test&lt;/scope&gt; 添加到您的依赖项中。

标签: java maven unit-testing websphere


【解决方案1】:

在测试范围内创建具有这种依赖关系的 maven 配置文件(正如 Alayor 在他的评论中建议的那样)

<profiles>
    <profile>
        <id>validation-test</id>
        <dependencies>
            <dependency>
                <groupId>org.glassfish</groupId>
                <artifactId>javax.el</artifactId>
                <version>3.0.1-b08</version>
                <scope>test</scope>
            </dependency>
        </dependencies> 
    </profile>
</profiles>

在启用此配置文件的情况下运行测试。 如果需要使用任何其他实现进行测试,只需一个新配置文件

当然,在构建阶段,您需要添加一些相应的验证 API,或者使用 WebSphere 实现作为依赖项,如果部署到已经具有 impl 的容器,则使用 &lt;scope&gt;provided&lt;/scope&gt;

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2013-04-08
    • 1970-01-01
    • 2016-03-11
    • 2014-07-29
    • 2011-07-11
    • 2018-04-19
    • 2017-09-20
    • 1970-01-01
    相关资源
    最近更新 更多