[英]Use of Junit but not for testing?
我有一個帶有 Vaadin 的 Spring Boot 應用程序,我只需要簡單的 UI 元素驗證而無需支持 bean。例如,只需檢查文本字段值是否為空、空或不。
由於驗證器需要一個 bean,我正在考慮使用 Junit Assert 來完成這項簡單的工作。 因此,使用 Junit 不僅用於運行測試,還用於應用程序的主要流程。
這是一種好的做法嗎?還有哪些替代方法?
對於需要將 Vaadin 的轉換器或驗證器綁定到單個字段/值對而不涉及 Bean 的此類用例,我編寫了 FieldBinder實用程序類,它可以在 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);
這是好習慣嗎
我不認為junit是為了在生產代碼中使用
我只需要簡單的 UI 元素驗證而無需支持 bean。 有什么選擇
我相信您仍然可以使用綁定 API,只需忽略 getter/setter:
new Binder<>().forField(new TextField())
.withValidator(...)
.bind(o -> null, (o, o2) -> {});
雖然Binder
需要一個“bean”,但它不必是完全抽出的東西。 您還可以bind
兩個函數(一個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")
}))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.