Đừng thử - thay vào đó hãy giới thiệu phương pháp bạn có thể giả lập nhận ngày tháng. Một cái gì đó như thế này:
interface Utility {
Date getDate();
}
Utilities implements Utility {
public Date getDate() {
return Calendar.getInstance().getTime();
}
}
Sau đó, bạn có thể tiêm này vào lớp học của bạn hoặc chỉ sử dụng một lớp helper với một loạt các phương pháp tĩnh với một phương pháp tải cho giao diện:
public class AppUtil {
private static Utility util = new Utilities();
public static void load(Utility newUtil) {
this.util = newUtil;
}
public static Date getDate() {
return util.getDate();
}
}
Sau đó, trong ứng dụng của bạn mã:
private void doSomething() {
Date today = AppUtil.getDate();
....
}
Sau đó, bạn có thể tải giao diện giả trong phương pháp thử nghiệm của mình.
@Test
public void shouldDoSomethingUseful() {
Utility mockUtility = // .. create mock here
AppUtil.load(mockUtility);
// .. set up your expectations
// exercise the functionality
classUnderTest.doSomethingViaAPI();
// ... maybe assert something
}
Xem thêm Should you only mock types you own? và Test smell - everything is mocked
dòng đó không thể được biên dịch! – adarshr
'Hôm nay' là một thành viên lớp (trường) hoặc một biến cục bộ bên trong một phương thức? –
biến cục bộ bên trong một phương thức – Randomize