2012-04-03 35 views
6

Tôi muốn viết một số trường hợp thử nghiệm cho ứng dụng web của mình nhưng bị kẹt ở một số trường hợp như "Mã thông báo này sẽ hết hạn sau 30 ngày". Không ai thích chờ 30 ngày trước khi các bài kiểm tra kết thúc.Làm thế nào để viết testcase để kiểm tra những thứ như "30 ngày hết hạn"?

Ngoài ra còn có các trường hợp khác liên quan đến một số sự kiện dự kiến ​​sẽ xảy ra, như "Gửi email này 2 tuần sau khi người dùng đăng ký": "Tạo hóa đơn 2 ngày trước ngày thanh toán tiếp theo", vv

gợi ý gì bạn có viết những bài kiểm tra như vậy không? Hoặc, có cách nào khác để đảm bảo rằng các chức năng này hoạt động chính xác như được thiết kế không?

Trả lời

4

Cách tiếp cận của tôi khi viết các thử nghiệm này là xác định thời gian hết hạn bằng mili giây. Bằng cách đó bạn có thể dễ dàng viết các bài kiểm tra vì môi trường thử nghiệm của bạn có thể xác định hết hạn 1 ms. Môi trường sản xuất rõ ràng sẽ xác định thời gian thích hợp. Thông thường, chúng có thể được đặt làm giá trị cấu hình hoặc giá trị db.

+0

Đồng ý. Bạn thực tế sẽ cần các quy tắc khác nhau trong Dev và QA so với Sản xuất để có thể kiểm tra các loại trường hợp này. – mydoghasworms

0

Tách chức năng xuống và kiểm tra các bước riêng lẻ.

Hết hạn một mục sau một thời gian nhất định bao gồm đặt mục ở đâu đó bằng dấu thời gian hết hạn và một phần khác của chương trình hết hạn mục có dấu thời gian cũ. Theo đó, kiểm tra các mục mới được chèn chính xác với dấu thời gian chính xác và mã hết hạn sẽ xóa chính xác các mục từ 30 ngày trở lên. Các mục được chèn vào và gỡ bỏ không phải là như nhau vì lợi ích của bài kiểm tra.

Điều tương tự cũng áp dụng cho email được gửi sau một khoảng thời gian nhất định.

1

Tôi giả sử bạn có một số mã như

if(token.ExpirationDateTime > DateTime.Now) 
{ 
    // do some job to expire 
} 

Thông thường tôi cung cấp các lớp học với logic như vậy với một lĩnh vực tiêm loại Func<DateTime>. Ví dụ

public class ExpirationManager 
{ 
    private Func<DateTime> _nowProvider; 

    public ExpirationManager(Func<DateTime> nowProvider) 
    { 
    _nowProvider = nowProvider; 
    } 
} 

Sau đó, mã hết hạn trông giống như

if(token.ExpirationDateTime > _nowProvider()) 
{ 
    // do some job to expire 
} 

Bằng cách này bạn có thể thay thế thời gian hệ thống hiện tại thực sự với bất cứ điều gì bạn muốn DataTime khi làm các xét nghiệm (ví dụ kiểm tra đơn vị).

Các vấn đề liên quan