2011-12-19 30 views
10

Trong thử nghiệm tích hợp (JDK 6) Tôi đang cố gắng nắm bắt tất cả các kết nối TCP gửi đi và giả sử chúng. Có vẻ như tôi nên sử dụng phương thức java.net.Socket#setSocketImplFactory(). Hoạt động tốt tại thời điểm này, nhưng tôi không thể hiểu làm thế nào tôi có thể có được một quyền truy cập vào nhà máy ban đầu, để nhanh chóng ban đầu JDK cung cấp SocketImpl lớp. Tôi cần điều này chủ yếu là vì tôi muốn để một số kết nối tự do đi ra ngoài mà không bị chế nhạo. Bạn có thể đề xuất một số sách hướng dẫn/hướng dẫn/hướng dẫn về vấn đề này không?Làm thế nào để giả lập một kết nối Socket đi?

+0

Câu hỏi này có liên quan: http://stackoverflow.com/questions/2083647/writing-a-java-net-socketimplfactory – yegor256

+0

Cũng liên quan: http://stackoverflow.com/questions/2257901/mock-runtime-getruntime – Rich

Trả lời

0

Theo javadoc, bạn sẽ có thể sử dụng SocketFactory#getDefault() để lấy SocketFactory mặc định cho môi trường của mình.

BTW: Bạn cũng có thể muốn nhìn vào RFE này/lỗi mà tuyên bố rằng SocketImplFactory cơ bản là một ngõ cụt: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4245730

+0

Bạn nói đúng, nhưng tôi đang nói về 'SocketImplFactory', tạo ra các cá thể của lớp' SocketImpl'. Lớp 'java.net.Socket' không liên quan gì đến tất cả điều này. – yegor256

0

Nhìn vào mã nguồn của lớp Socket, chưa có nhà máy ban đầu - các các nhà thầu kiểm tra xem liệu factory có phải là không và nếu có, họ chỉ cần gán impl làm PlainSocketImpl() mới.

+0

Theo như tôi hiểu không có điều gì như "mã nguồn của lớp Socket". Mỗi JDK có nguồn riêng của nó, có thể khác với việc triển khai thực hiện. – yegor256

+0

Có lẽ đó là ngây thơ của tôi nhưng tôi cho rằng bạn đang sử dụng Oracle JDK 6, trong trường hợp có các nguồn cụ thể để xem xét - tôi đã làm điều này và sử dụng nó để giải thích rằng không có nhà máy gốc để có được(). Nếu bạn có thể làm điều đó, tôi đồng ý với @Peter Lawrey rằng việc sử dụng một dịch vụ là phương pháp tốt nhất. Tôi đã phải làm tương tự với Runtime.getRuntime(). http://stackoverflow.com/questions/2257901 – Rich

+0

Đó là thư viện của bên thứ ba bên trong ứng dụng của tôi, đó là sử dụng Ổ cắm. Tôi không thể thay đổi nó dù sao đi nữa. – yegor256

1

Thay vì chế nhạo một Ổ cắm, tôi sẽ tạo ra một dịch vụ Socket cho Socket để nói chuyện. Điều này có thể nắm bắt tất cả các dữ liệu được viết và trả lời theo bất kỳ cách nào bạn muốn. Nó có thể chạy trong cùng một thử nghiệm và có thể trong cùng một luồng.

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