2017-03-18 2 views
1

일부 CouchBase Lite 모바일 클래스를 테스트하기위한 최소한의 테스트 클래스를 만들려고합니다. 응용 프로그램 컨텍스트를 조롱했지만 시도가 실패했습니다.안드로이드 응용 프로그램 컨텍스트없이 CouchBase-Lite 모바일을 사용하는 단위 테스트

문제는 CouchBase 관리자가 MockContext 클래스의 구현되지 않은 메소드 중 일부에 액세스하고 있다는 것입니다.

여기 내 접근 방식은 지금까지 다음과 같습니다 :

public class ClassToTest extends TestCase { 

    @Test 
    public void testGetAllDocumentsBundle() throws Exception { 

     try { 
      Manager manager = new Manager(
       new AndroidContext(new MockContext()), 
       Manager.DEFAULT_OPTIONS); 
     } 
     catch (Exception e) { 
      Log.e(TAG, "Exception: " + e); 
      assertTrue(false); 
     } 
    } 

그리고 :

@RunWith(AndroidJUnit4.class) 
public class ItemReaderTest { 

    private android.content.Context instrumentationCtx; 

    @Before 
    public void setUp() throws Exception { 
     instrumentationCtx = InstrumentationRegistry.getContext(); 
    } 

    ... 

    @Test 
    public void testGetAllDocumentsBundle() throws Exception { 
     Database database = null; 
     String databaseName = "test"; 
     try { 
      Context context = new AndroidContext(instrumentationCtx); 
      Assert.assertTrue(context != null); 

      Manager manager = new Manager(context, Manager.DEFAULT_OPTIONS); <--- throws exception because context.getFilesDir(); return null in Couchbase Manager.java constructor 
      ... 
     } 
    } 

사람이 작업을 수행 할 수 있었다? 나는 실질적으로 을 가지고 있습니까? (예 : 실제 모바일 응용 프로그램을 만들고 Couchbase 모바일을 전혀 테스트 할 수없는 상황입니까?)

답변

1

이렇게하면 관리자와 데이터베이스를 성공적으로 만들 수있었습니다 :

class MyMockContext extends MockContext { 

    @Override 
    public File getFilesDir(){ 
     File f = new  
      File("/data/user/0/com.example.mypackagename/files"); 
     return f; 
    } 
} 

그리고 이러한 맥락과 관리자를 초기화 :.

Context context = new AndroidContext(new MyMockContext()); 
Manager manager = new Manager(context, Manager.DEFAULT_OPTIONS); 

그러나이 경로 테스트가 특정 환경에 의존하고 하드 코딩 할 않는 아마도 더 나은 졸이 거기 밖으로 ...