Chrono Mock
Ngôn ngữTiếng Việt

Một lựa chọn thay thế RunAsDate, với những phần còn thiếu

RunAsDate đã nhiều năm là câu trả lời cho “chạy chương trình này ở một ngày khác trên Windows”, và nó là một câu trả lời tốt. Trang này nói về chỗ hai công cụ khác nhau, và chỗ RunAsDate vẫn là lựa chọn tốt hơn.

So sánh song song

 RunAsDateChrono Mock
Chạy một ứng dụng ở ngày giảcócó
Không đụng đến đồng hồ hệ thốngcócó
Hàm thời gian bị chặn544 (30 được dịch chuyển, 14 chỉ đếm)
Đồng hồ nhanh hơn thời gian thậtkhông cung cấpmọi hệ số nhân nguyên
Đóng băng đồng hồcó, mặc địnhcó
Nhảy khi ứng dụng đang chạychỉ quay về ngày thật, sau một số giây định sẵntiến và lùi, tới bất kỳ thời điểm nào
Múi giờ chỉ cho tiến trình đókhông có tài liệucó, độ lệch cố định
Tiến trình con kế thừa phiênkhông có tài liệucó
Gắn vào một ứng dụng đang chạycó, từ phiên bản 1.40không - nó tự khởi chạy ứng dụng
Nhiều ứng dụng với các ngày khác nhau cùng lúccókhông - mỗi lúc một phiên
Cho bạn biết có hiệu quả hay khôngkhôngkết luận, theo từng kênh, kèm số lần gọi
Ứng dụng Electron và Chromiumkhông có tài liệucơ chế riêng
Dòng lệnh cho CIcócó, với mã thoát và JSON
Mã nguồnfreeware, đóngGPL-3.0
Dung lượngtải về 47 KB, 57 KB cho bản 64-bit~2,4 MB bản dòng lệnh, ~70 MB có cửa sổ
Phiên bản Windows cũtận Windows 2000Windows 10 và 11

“Không có tài liệu” nghĩa là tính năng không được nhắc đến trên trang của RunAsDate. Đó không phải khẳng định rằng công cụ thiếu nó. Đồng hồ của RunAsDate đứng yên trừ khi bật tùy chọn Move the time forward according to the real time.

Khác biệt quan trọng nhất

Đó không phải số lượng kênh. Mà là việc RunAsDate nói thẳng, trong tài liệu của chính nó, rằng nó “sẽ không ảnh hưởng đến các ứng dụng lấy ngày/giờ hiện tại từ một nguồn khác” - rồi để bạn tự tìm hiểu xem ứng dụng của bạn có thuộc nhóm đó không.

Chrono Mock coi chính câu đó là điều cần đo. Mỗi phiên kết thúc bằng một kết luận, các kênh mà ứng dụng thực sự đã đọc kèm số đếm của từng kênh, các kênh bị bỏ sót, và một cảnh báo khi ứng dụng bị bắt gặp mở một kết nối mạng trước cả khi nó hỏi đồng hồ.

Một ứng dụng trông như đã bị dịch chuyển thời gian mà thực ra không còn tệ hơn một ứng dụng chưa từng khởi chạy - nó tạo ra một bài kiểm thử đã qua mà chẳng có nghĩa gì. Kiểm toán hoạt động thế nào →

Năm hàm, hay 44 kênh

RunAsDate chặn GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime và GetSystemTimePreciseAsFileTime. Với rất nhiều ứng dụng, thế là thực sự đủ, vì đó là nơi đồng hồ treo tường được đọc.

Phần còn lại của bề mặt là nơi mã phụ thuộc vào ngày tháng thường ẩn nấp:

  • múi giờ - hai hàm báo múi giờ, cộng sáu hàm chuyển đổi giữa các múi, đó là cách một báo cáo rơi vào sai ngày
  • trục thời gian đã trôi - số tick và thời gian ngắt không thiên lệch, thứ mà phần đếm ngược của bản dùng thử thường đo
  • các lệnh ngủ, để một khoảng trễ là khoảng trễ trên đồng hồ phiên chứ không phải đồng hồ thật, và các lệnh chờ đối tượng, được đếm và giữ nguyên độ dài thật
  • bộ hẹn giờ - waitable, cửa sổ, thread-pool và đa phương tiện
  • việc tạo tiến trình, để các tiến trình con của trình cài đặt chạy trong cùng phiên chứ không ở thời điểm hiện tại
  • các kết nối mạng, được đếm như dấu hiệu thời gian có thể đến từ một máy chủ

Trong 44 kênh, 30 được đưa lên đồng hồ phiên. 14 kênh còn lại chỉ được đếm và giữ nguyên thật, nên báo cáo liệt kê chúng mà không nói rằng chúng đã bị dịch chuyển. Đồng hồ treo tường và múi giờ được dịch chuyển trong mọi phiên. Trục thời gian trôi qua và các lệnh chờ được theo dõi khi bạn yêu cầu bằng --scale-duration, còn bộ đếm độ phân giải cao bằng --scale-qpc.

Khi nào RunAsDate là lựa chọn tốt hơn

Thực sự, và không hiếm:

  • Bạn cần một ngày, ở tốc độ bình thường, ngay lúc này. RunAsDate là bản tải về dưới 60 KB, không có cửa sổ để học và đã làm đúng việc này nhiều năm.
  • Bạn đang dùng Windows cũ hơn. RunAsDate chạy tận Windows 2000. Công cụ này nhắm tới Windows 10 và 11 và không được kiểm thử trên bản nào cũ hơn.
  • Kích thước có ý nghĩa. Bản tải về 47 KB so với ~2,4 MB cho dòng lệnh, hoặc ~70 MB có cửa sổ, không phải là so sánh sát nút.
  • Bạn không muốn có kết luận. Đo độ bao phủ nghĩa là phải đọc kết quả. Nếu bài kiểm thử chỉ dùng một lần, đó là chi phí mà bạn không yêu cầu.
  • Ứng dụng đã đang chạy. Từ phiên bản 1.40, RunAsDate có thể gắn vào một tiến trình đang chạy. Chrono Mock tự khởi chạy ứng dụng, nên một ứng dụng không thể khởi động lại nằm ngoài tầm với của nó.
  • Bạn muốn nhiều ứng dụng với các ngày khác nhau cùng lúc. RunAsDate cho mỗi ứng dụng một ngày riêng. Chrono Mock chạy mỗi lúc một phiên.

Hai công cụ cũng có thể cùng tồn tại. Không gì ở đây ngăn bạn giữ RunAsDate cho trường hợp nhanh.

Điều mà cả hai đều không dành cho

Cả hai công cụ đều xuất hiện trong các tìm kiếm về gia hạn thời gian dùng thử. Công cụ này không được xây dựng cho việc đó, và không ví dụ, kịch bản hay trang nào ở đây sẽ từng minh họa nó. Chrono Mock dành để kiểm thử phần mềm mà bạn chịu trách nhiệm - hạn giấy phép của chính bạn, logic gia hạn của chính bạn, báo cáo cuối tháng của chính bạn.

Đó cũng là trường hợp ít có khả năng hoạt động nhất. Bảo vệ bản quyền thường đọc giờ qua những đường được chọn để khó chặn - trang dữ liệu dùng chung ở chế độ người dùng, lời gọi hệ thống trực tiếp, một máy chủ - và đồng hồ chạy lùi là điều kiện mà mã như vậy được viết ra để phát hiện. Kiểm toán sẽ cho bạn biết rằng nó không hoạt động, đó là câu trả lời trung thực chứ không phải câu trả lời hữu ích.

Dùng thử