使用 Junit 但不用于测试?

Use of Junit but not for testing?

我有一个带有 Vaadin 的 spring 启动应用程序,我只需要简单的 UI 元素验证而不支持 beans.For 示例来检查文本字段值是否为 null、是否为空.

由于验证器需要一个 bean,所以我考虑使用 Junit Assert 来完成这个简单的工作。因此,使用 Junit 不仅用于 运行 测试,还用于应用程序的主要流程。

这是好的做法吗?有哪些替代方法?

Is this good practice

我认为 junit 不应该用于生产代码

I just need simple UI element validation without backing beans. what alternatives are there

我相信你仍然可以使用绑定API,忽略getters/setters:

new Binder<>().forField(new TextField())
  .withValidator(...)
  .bind(o -> null, (o, o2) -> {});

对于需要在不涉及 Bean 的情况下将 Vaadin 的转换器或验证器绑定到单个字段/值对的这种用例,我编写了 FieldBinder 实用程序 class,可以在Vaadin 的目录并作为 Maven 依赖项添加到您的项目中。

https://vaadin.com/directory/component/fieldbinder

        // Binder with integer
    FieldBinder<Integer> integerFieldBinder = new FieldBinder<>();
    TextField integerField = new TextField("Input number");

    // Text field with Integer value Converter and Validator
    // Demoing how to detect if value is valid and how to get it from FieldBinding
    FieldBinding<Integer> integerBinding = integerFieldBinder.forField(integerField)
            .withConverter(new StringToIntegerConverter("This is not a number"))
            .withValidator(new IntegerRangeValidator("Give a number between 5 and 10",5,10))
            .bind(integerValue);

虽然 Binder 需要一个“bean”,但它不一定是 完全抽出的东西。您还可以 bind 使用两个函数(a ValueProvider 和一个 Setter)。有了这个你基本上可以使用任何 你喜欢的容器作为“bean”。例如。 MapAtomicInteger(你 必须有办法从中读取一个值并写回一个值。

def tf = new TextField("Answer to all questions of the universe").tap {
    setWidthFull()
}

def binder = new Binder<Map>().tap{
    forField(tf)
        .asRequired("A value is mandatory")
        .withNullRepresentation("")
        .withConverter(new StringToIntegerConverter("Only numbers are allowed"))
        .withValidator(new IntegerRangeValidator("Must be 42", 42, 42))
        .bind( // XXX
            { m -> m.value },
            { m, v -> m.value = v }
        )

    setBean([:])
}

add(tf)
add(new Button("Save", {
    Notification.show(binder.valid ? "Saved ${binder.bean}" : "Please fix the errors first")
}))