Open jacobvn84 opened 1 year ago
Tham khảo mã nguồn của Task
package net.serenitybdd.screenplay;
import net.serenitybdd.core.steps.Instrumented;
import net.thucydides.core.util.NameConverter;
import java.util.Arrays;
import java.util.function.Consumer;
import java.util.function.Function;
/**
* A marker class to indicate that a Performable represents a higher level business task,
* rather than a system interaction.
*/
public interface Task extends Performable {
...
/**
* Create a new Performable Task made up of a list of Performables.
*/
static <T extends Performable> AnonymousTask where(String title, T... steps) {
return Instrumented.instanceOf(AnonymousTask.class).withProperties(title, Arrays.asList(steps));
}
....
}
Trên là đoạn trích mô tả Task.where
. Phương thức where
trong interface Task
gọi đến
Instrumented.instanceOf(AnonymousTask.class).withProperties(title, Arrays.asList(steps))
.
Vậy bản chất khi so sánh giữa Task.where
và Instrumented.instanceOf
theo ví dụ trên thực ra là so sánh 2 đoạn code dưới đây.
Instrumented.instanceOf(AnonymousTask.class).withProperties(title, Arrays.asList(steps))
(1)
vs
Instrumented.instanceOf(AnonymousTask.class).withProperties(constructorParameters)
(2)
Đối với Instrumented.instanceOf(SearchForKeyword.class).withProperties(keyword)
(2) tất cả các steps
được đóng gói trong SearchForKeyword.class
điều này có nguy cơ dẫn đến việc dễ đánh mất bối cảnh hoặc quên mất bối cảnh của việc sử dụng SearchForKeyword
task trông tổng thể kịch bản khi mà lập trình viên mở riêng file code ra để sửa. Bù lại nó làm cho kịch bản trở nên bớt rườm rà và chi tiết.
Dùng Task.where
giúp ta có một cái nhìn một cách trực quan, inline hơn vì chúng ta có khả năng thêm, bớt được các steps trong quá trình implementation một cách dễ dàng. Có thể sử dụng một danh sách các công việc T... steps
. Cách này cho phép chúng ta lười biếng một chút. Có thể thoải mái hơn trong việc định hình các mối liên quan giữa các steps trong Task.where
Có 2 kiểu viết trong serenity screenplay java
Task.where
Instrumented.instanceOf
2 kiểu này khác nhau gì nhỉ? thích dùng cái nào thì dùng đúng ko nhỉ?