2016-11-07 3 views
4

나는 다음과 같이 안드로이드에 RxJava을 사용하여 새 파일을 만들려고 오전 :RxJava file.createNewFile() 항상 반환 TRUE

public Observable<Boolean> createRx(String name) { 

    return Observable.just(name) 
     .map(new Func1<String, Boolean>() { 
      @Override 
      public Boolean call(String s) { 
       File newFile = new File(localPath + "/" + s); 

       try { 
        return newFile.createNewFile(); 
       } catch (IOException e) { 
        throw Exceptions.propagate(e); 
       } 
      } 
     }); 
} 

일반적으로 새 파일을 만들려면 다음과 같이 :

public boolean createNonRx(String name) { 

    boolean ret = false; 

    try { 
     File newFile = new File(localPath + "/" + name); 
     ret = newFile.createNewFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return ret; 
} 

내 JUnitTest 코드와 TestReport :

@Test 
public void testCreateRx() throws Exception { // FAIL! 
    TestSubscriber<Boolean> testSubscriber = new TestSubscriber<>(); 

    source.createRx("JunitTest_Create_Rx").subscribe(testSubscriber); 
    testSubscriber.assertNoErrors(); 
    testSubscriber.assertReceivedOnNext(Arrays.asList(Boolean.TRUE)); //PASS! 

    source.createRx("JunitTest_Create_Rx").subscribe(testSubscriber); 
    testSubscriber.assertNoErrors(); 
    testSubscriber.assertReceivedOnNext(Arrays.asList(Boolean.FALSE)); //FAIL! 
    //expected to be [false] (Boolean) but was: [true] (Boolean) 
} 


@Test 
public void testCreateNonRx() { // PASS! 
    boolean fstRet = source.createNonRx("JunitTest_LocalDataSource_Create_Non_Rx"); 
    assertTrue(fstRet); 

    boolean secRet = source.createNonRx("JunitTest_LocalDataSource_Create_Non_Rx"); 
    assertFalse(secRet); 
} 

내가 RxJava에 초보자입니다, 내 코드에 문제가?

기존 파일을 만들려고 할 때 createRx()를 호출하면 TRUE가 반환되는 이유는 무엇입니까?

도움 주셔서 감사합니다.

답변

1

SubscribersObservers 재사용 할 안된다 - 새로운 각 시간을 가입하고 당신이 무엇을 가지고 우리에게