2013-02-08 25 views
6

Tôi đang cố gắng triển khai thử nghiệm đơn vị bằng cách sử dụng Robolectric để thay thế các phương thức được stubbed trong android.jar trong khi cũng sử dụng jMockit để giả lập một lớp Android (Fragment, trong trường hợp của tôi). Tuy nhiên, tôi không thể làm cho nó hoạt động được. Nếu tôi chú thích lớp kiểm tra với @RunWith(RobolectricTestRunner.class), tôi nhận được:có thể jmockit và robolectric cùng tồn tại?

java.lang.IllegalStateException: JMockit không được khởi tạo đúng cách; kiểm tra jmockit.jar rằng trước junit.jar trong classpath (nếu sử dụng JUnit; nếu không, kiểm tra tài liệu)

Nếu tôi sử dụng @RunWith(JMockit.class) hoặc không @RunWith, tôi nhận được "Stub!" ngoại lệ.

Hiện tại, đường dẫn lớp của tôi có các thứ theo thứ tự sau: robolectric, jmockit, junit, android.

Bất kỳ ai ngoài đó có thể chơi jmockit và robolectric để chơi cùng nhau không?

+0

Nó tương tự như PowerMock tôi nghĩ. Tôi không biết giải pháp nào được nêu ra –

Trả lời

5

Điều này có thể thực hiện được. Tôi đã không thử nghiệm này, nhưng bạn có thể tạo Á hậu thử nghiệm của riêng bạn.

Hãy nhìn vào các nguồn cho các vận động viên thi JMockit và Robolectric:

Trong số hai Robolectric một là phức tạp hơn nhiều, vì vậy chúng tôi don' t muốn nhân đôi chức năng đó. Á hậu kiểm tra JMockit khá đơn giản. Nó sẽ làm việc để mở rộng RobolectricTestRunner và bao gồm các chức năng JMockit.

import mockit.internal.startup.*; 
class MyTestRunner extends RobolectricTestRunner { 

    static { Startup.initializeIfNeeded(); } 

    /** 
    * Constructs a new instance of the test runner. 
    * 
    * @throws InitializationError if the test class is malformed 
    */ 
    public MyTestRunner(Class<?> testClass) throws InitializationError 
    { 
     super(testClass); 
    } 
} 
+0

Thú vị, cảm ơn đề xuất! –

+0

@Joe, tôi đang tìm cách thử phương pháp tương tự cho PowerMock và Robolectric. Nhưng tôi đã thất bại trong chuyến lưu diễn nhanh. Nó khá phức tạp. Có lẽ tôi sẽ làm vòng hai :) –

+0

Điều này không giúp được gì. Vấn đề là, ngay sau khi tôi thêm JMockit phụ thuộc vào dự án (mà không thực sự sử dụng nó bất cứ nơi nào), các xét nghiệm Roboelectric bắt đầu thất bại với "Không có phương pháp tương thích được tìm thấy: fireTestRunStarted" – altumano

2

Phiên bản 1.8 (Apr 27, 2014) JMockit có thể làm việc cùng với Robolectric.

JMockit now works fine with the Robolectric Android testing tool (tested with Robolectric 2.2 and 2.3). 

http://jmockit.org/changes.html

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