2013-01-12 31 views
9

Trong các bài kiểm tra đơn vị của tôi, tôi muốn tạo một cá thể Hazelcast nhúng (đang xử lý/trong bộ nhớ) không cố khởi động hoặc thực hiện bất kỳ hoạt động mạng nào cả.Làm thế nào để bạn tạo một cá thể Hazelcast nhúng trong tiến trình/trong bộ nhớ, mà không có mạng?

Làm cách nào để thực hiện việc này?

Ví dụ:

Config config = new Config(); 

// what goes here? 

HazelcastInstance inProcessOnly = Hazelcast.newHazelcastInstance(config); 

Trả lời

2

Trả lời câu hỏi của riêng tôi:

Dường như đây là không thể, nhưng có một giải pháp tốt cho mục đích thử nghiệm đơn vị mà tôi đề cập dưới đây. Nhìn vào mã nguồn của Hazelcast, có vẻ như mã mạng được tự động thực hiện khi xây dựng Node, và không có số lượng thao tác Config làm việc cho tôi. Tôi rất muốn được hiển thị nếu không có thể.

Trong mọi trường hợp, tôi đã có thể thực hiện những gì tôi cần cho kiểm tra đơn vị:

Là một người sử dụng thời gian dài của EasyMock, tôi không biết làm thế nào để sạch kiểm tra mã mà gọi Hazelcast.newHazelcastInstance(config); vì nó là một gọi phương thức tĩnh. Thực tế điều này đã nhắc tôi hỏi câu hỏi này - tôi chỉ muốn một cá thể Hazelcast chỉ trong bộ nhớ để thử nghiệm. Tôi không muốn các hoạt động mạng được thử trên máy xây dựng bị hạn chế của chúng tôi - tôi không biết liệu máy có bị hạn chế đủ để logic khám phá của Hazelcast có thể không thành công.

Sau đó, tôi đã tìm thấy tiện ích mở rộng của PowerMock đối với EasyMock, cho phép tôi thử các cuộc gọi phương thức tĩnh.

Với EasyMock và PowerMock, tôi đã có thể kiểm tra toàn bộ mã liên quan đến Hazelcast trong dự án của chúng tôi mà không thực sự bắt đầu môi trường Hazelcast.

2

Tôi có thể thực hiện tương tự với Mockito. Ví dụ, với một Topic:

HazelcastInstance hazelcastInstance = Mockito.mock(HazelcastInstance.class); 
Mockito.when(hazelcastInstance.getTopic("yourtopic")).thenReturn(Mockito.mock(ITopic.class)); 
4

Bạn cũng có thể sử dụng TestHazelcastInstanceFactory mà cũng được sử dụng bởi Hazelcast nội bộ cho các đơn vị xét nghiệm. Bạn sẽ cần phải thêm phụ thuộc Maven này cho nó:

<dependency> 
    <groupId>com.hazelcast</groupId> 
    <artifactId>hazelcast</artifactId> 
    <version>${hazelcast.version}</version> 
    <classifier>tests</classifier> 
    <scope>test</scope> 
</dependency> 

Xem BasicCacheTest để biết ví dụ về cách sử dụng.

+0

Liên kết đến BasisCacheTest là chết. – asmaier

+0

Thx. Đã sửa liên kết. –

6

FWIW Tôi đã tạo thử nghiệm trong Hazelcast 3.6.1 và vô hiệu hoá theo lập trình cụm mạng bằng cách sử dụng mã sau trong hàm tạo. Điều này tạo ra một máy chủ độc lập để thử nghiệm.

Không nhanh bằng cách sử dụng mô hình nhưng nhanh hơn chấp nhận cấu hình mặc định.

Config config = new Config(); 
config.setProperty("hazelcast.shutdownhook.enabled", "false"); 
NetworkConfig network = config.getNetworkConfig(); 
network.getJoin().getTcpIpConfig().setEnabled(false); 
network.getJoin().getMulticastConfig().setEnabled(false); 
HazelcastInstance instance = Hazelcast.newHazelcastInstance(config); 
0

Bạn có thể tạo trong bộ nhớ mà không cần giả như thế này:

HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); 

params khác trong constructor của bạn, bạn có thể sử dụng mô hình, cách này mã của bạn sẽ hoạt động tốt.