2010-05-28 20 views
6

Tôi đang viết các bài kiểm tra đơn vị cho một mô-đun trong một ứng dụng Javascript nhỏ. Để giữ cho giao diện được sạch sẽ, một số chi tiết triển khai được đóng bởi một hàm ẩn danh (mẫu JS thông thường để bảo mật). Tuy nhiên, trong khi thử nghiệm tôi cần phải truy cập/mô phỏng/xác minh các phần riêng tư.Kiểm tra hộp trắng trong Javascript - cách xử lý bảo mật?

Hầu hết các bài kiểm tra mà tôi đã viết trước đó đều bằng Python, không có biến riêng tư (thành viên, số nhận dạng, bất cứ điều gì bạn muốn gọi cho họ). Một cách đơn giản cho thấy sự riêng tư thông qua một dấu gạch dưới hàng đầu cho người dùng, và tự do bỏ qua nó trong khi kiểm tra mã. Trong các ngôn ngữ OO được đánh máy tĩnh, tôi cho rằng người ta có thể làm cho các thành viên riêng có thể truy cập vào các bài kiểm tra bằng cách chuyển đổi chúng thành được bảo vệ và phân lớp các đối tượng cần kiểm tra. Trong Javascript, sau này không áp dụng, trong khi trước đây có vẻ như thực hành xấu.

Tôi luôn có thể quay lại thử nghiệm hộp đen và chỉ cần kiểm tra kết quả cuối cùng. Đó là cách tiếp cận đơn giản và sạch nhất, nhưng tiếc là không thực sự đủ chi tiết cho nhu cầu của tôi.

Vì vậy, có cách nào giữ chuẩn biến riêng tư trong khi vẫn giữ lại một số backdoors để thử nghiệm trong Javascript không?

+8

Hmm, tôi không thích khi mọi người thử các bộ phận riêng của tôi – Martin

Trả lời

1

No. Tôi không tin là có. Về cơ bản, nó tóm tắt cho dù bạn có cách tiếp cận đóng cửa và từ bỏ các thử nghiệm hộp trắng hay làm các thử nghiệm hộp màu trắng và sử dụng trang trí tên cho các thành viên "tư nhân". Trên thực tế không chỉ trong Python, nhưng trong javascript quá nhiều dự án sử dụng gạch dưới không để ma thuật trang trí. Vì vậy, theo cách này, đây là một giải pháp được chấp nhận rộng rãi cho vấn đề này.

Nếu bạn không muốn điều đó và thực sự, thực sự cần thử nghiệm đơn vị hộp trắng, thì bạn luôn có thể tích hợp các thử nghiệm vào đối tượng của mình. Nếu bạn có một bước xây dựng riêng biệt cho mã sản xuất (giảm thiểu, yêu cầu/cung cấp độ phân giải, vv) thì bạn có thể loại bỏ các hàm thử nghiệm trong quá trình này.

+0

Vâng, có vẻ như tôi sẽ phải làm một số trang trí sau khi tất cả. Cảm ơn. Kết hợp các thử nghiệm vào mã chính và loại bỏ trong quá trình xây dựng là một giải pháp thú vị, nhưng hơi quá lộn xộn. –

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