2010-09-09 32 views
5

Tôi đã cố gắng tạo một trường hợp thử nghiệm mở rộng intstrumentationtestcase, và bất cứ khi nào tôi gọi getinstrumentation() nó trả về một thể hiện null của Instrumentation thay vì một Instrumentation, hiển thị bất kỳ tự động hóa nào Tôi muốn làm vô dụng. Tôi có sự cho phép thiết lập trong manifest cũng mặc dù tôi chỉ thử nghiệm tự động hóa trên cùng một ứng dụng trường hợp này sẽ chạy trên ... bất kỳ ý tưởng?trường hợp thử nghiệm thiết bị đo đạc android - getinstrumentation() trả về null

Trả lời

2

Tôi đã có một vấn đề tương tự và có vẻ như phương thức getInstrumentation() trả về một công cụ hợp lệ chỉ sau khi phương thức setUp lớp cơ sở (InstrumentationTestCase) được gọi. Vui lòng xem mã bên dưới và kiểm tra thông báo gỡ lỗi LogCat:

import android.app.Instrumentation; 
import android.test.InstrumentationTestCase; 
import android.util.Log; 

public class TestInstrumentation extends InstrumentationTestCase { 

private static final String LOG_TAG = BrowseLocationsTest.class.getSimpleName(); 

private Instrumentation instr; 

public TestInstrumentation() { 
    instr = getInstrumentation(); 
    Log.d(LOG_TAG, "TestInstrumentation instrumentation: " + instr); 
} 

@Override 
protected void setUp() throws Exception { 
    instr = getInstrumentation(); 
    Log.d(LOG_TAG, "setUp instrumentation: " + instr); 

    super.setUp(); 

    instr = getInstrumentation(); 
    Log.d(LOG_TAG, "setUp instrumentation: " + instr); 
} 

public void testInstrumentation() { 
    Log.d(LOG_TAG, "testInstrumentation instrumentation: " + instr); 
} 
} 

Thiết bị được đặt đúng như mong đợi ngay sau cuộc gọi super.setUp().

5

Bạn cần tiêm các thiết bị đo đạc lập trình bằng cách gọi injectInstrumentation(InstrumentationRegistry.getInstrumentation()); sử dụng InstrumentationRegistry từ chính thức Android thử nghiệm-support-lib: 0.1

0

Tôi nghĩ rằng những gì bạn thực sự cần là bối cảnh, trong Junit4, chúng ta có thể có được bối cảnh của InstrumentationRegistry.getContext();

2

Đã xảy ra sự cố tương tự khi sử dụng Thư viện Hỗ trợ Thử nghiệm với chú thích '@RunWith (AndroidJUnit4.class)', mặc dù tôi đã đảm bảo đưa công cụ của mình vào phương pháp setUp() như được chỉ định bởi @Gallal và @Dariusz Gadomski, chỉ tiếp tục ném NullPointerExceptions.

Bật ra, tôi quên bao gồm chú thích @Before trên phương pháp thiết lập của mình để jUnit4 không chạy chú thích, trong khi trước đó với các kiểm tra thiết bị dựa trên jUnit3, nó sẽ chạy. Kể từ khi tôi thực hiện tiêm thiết bị đo đạc trong setUp(), nó không bao giờ được tiêm ngay cả khi mã trông giống như nó nên đã được tiêm nó.

Vì vậy, thay vì

@Override 
protected void setUp() throws Exception { 
... 

Hãy chắc chắn để sử dụng

@Before 
public void setUp() throws Exception { 
    super.setUp(); 
    injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 
} 

để thay thế.

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