使用 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”。例如。 Map
或 AtomicInteger
(你
必须有办法从中读取一个值并写回一个值。
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")
}))
我有一个带有 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”。例如。 Map
或 AtomicInteger
(你
必须有办法从中读取一个值并写回一个值。
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")
}))