2015-07-02 15 views
9

3 ngày trước tôi đã hoàn thành hướng dẫn "bắt đầu" Arquillian và quyết định rằng đây sẽ là một điều tốt để sử dụng cho việc kiểm thử đơn vị phần của tôi trong hệ thống CQRS.Thử nghiệm CDI với Arquillian

Thật không may điều này đã chứng minh một chút ít hơn so với thẳng về phía trước. Tôi đã googled trong 3 ngày qua và vấn đề nó không được giải quyết bởi bất kỳ giải pháp đã làm việc cho người khác.

Tôi đang đi đến kết luận rằng vấn đề là với mã của tôi mặc dù tôi không thấy làm thế nào.

Nhiệm vụ của tôi là viết trình xử lý sự kiện lắng nghe chủ đề ActiveMQ cho các sự kiện và sau đó cập nhật "chế độ xem" trong một Mongo DB.

Sẽ có nhiều sự kiện trong hệ thống để tôi có thể tạo một lớp cơ sở trừu tượng mà tất cả người nghe sự kiện mở rộng.

Lớp cơ sở này chứa ứng dụng khách Mongo và thanh ghi để nghe chủ đề. Nó sử dụng một getter nạp cho tên người nghe mà nó sử dụng như là một tham chiếu bean trong một con đường lạc đà. ID trình nghe của khách hàng được tạo từ một tĩnh dài được tăng lên trên mỗi đăng ký người nghe. Điều này đảm bảo rằng mọi người nghe đều có thể xem mọi sự kiện được đăng lên chủ đề. Ý định là sau đó thêm một bộ lọc để giảm số lượng sự kiện nhận được.

Tôi đã tạo mã này và điều khiển mã từ một bài đăng chủ đề sự kiện tạo hẹn giờ và tất cả đều hoạt động tốt.

Sự cố với điều đó là yêu cầu chất lượng để cobertura báo cáo mức độ bao phủ mã 80% theo các bài kiểm tra đơn vị.

Đơn đăng ký thử nghiệm của tôi không phải là kiểm tra đơn vị để mức độ phù hợp của mã của tôi là 0%.

Tôi đã đến Arquillian qua một vài phương pháp thử nghiệm đơn vị khác trong CDI nhưng Arquillian dường như là lựa chọn tốt nhất nếu tôi chỉ có thể làm cho nó hoạt động.

Các lỗi tôi nhận được là:

java.lang.IllegalStateException: Could not find beans for Type=class org.apache.deltaspike.core.impl.scope.window.WindowBeanHolder and qualifiers:[] 

Tôi đã bao gồm deltaspike trong pom, tôi đã thêm nó vào việc triển khai shrinkwrap

chiết xuất POM

<dependency> 
    <groupId>org.apache.deltaspike.core</groupId> 
    <artifactId>deltaspike-core-api</artifactId> 
    <version>${deltaspike.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.deltaspike.core</groupId> 
    <artifactId>deltaspike-core-impl</artifactId> 
    <version>${deltaspike.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.jboss.shrinkwrap.resolver</groupId> 
    <artifactId>shrinkwrap-resolver-impl-maven</artifactId> 
    <version>2.0.0</version> 
</dependency> 

class Test @RunWith (Arquillian.class) lớp công khai ListenerTest {

AbstractEventListener listener = null ; 
    WindowBeanHolder w = new WindowBeanHolder(); 

    @Deployment 
    public static WebArchive createDeployment() { 
     return ShrinkWrap.create(WebArchive.class).addAsLibraries(Maven.resolver().loadPomFromFile("pom.xml") 
     .resolve("org.apache.deltaspike.core:deltaspike-core-api", 
       "org.apache.deltaspike.core:deltaspike-core-impl") 
     .withoutTransitivity().asFile()) 
     .addAsWebInfResource("beans.xml"); 
} 


    @Test 
    public void testExecute() { 
     Assert.assertNotNull(listener); 
    } 
} 

beams.xml My

<?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
    bean-discovery-mode="all"> 
</beans> 

Như bạn có thể thấy tôi đã thậm chí đã cố gắng thêm WindowBeanHolder vào mã.

Tôi đã thực hiện nhiều thay đổi đối với mã trong vài ngày qua. Tôi đã không bao gồm đầy đủ pom vv vì điều này có thể không cần thiết nhưng có thể thêm nếu cần thiết.

Nếu bạn có bất kỳ đề xuất nào về nơi tôi có thể đi từ đây, xin cảm ơn trước.

+0

DeltaSpike được kiểm tra qua Arquillian. Tôi sẽ kiểm tra thiết lập của họ. –

Trả lời

0

Tóm tắt lớp cơ sở dữ liệu bằng giao diện. Cung cấp một mông mongo cho sản phẩm, nhưng một thiết bị "giả" có thể kiểm tra đơn vị được kiểm tra.

Có tất cả mã của bạn tham chiếu đến giao diện và chèn (sử dụng phản chiếu nếu cần) giả mạo để kiểm tra mã của bạn trước khi chạy thử nghiệm đơn vị của bạn.

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