2016-11-07 6 views
4

私はこのように、Android上で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を再利用することは想定されていません - 新しいものと毎回購読し、あなたが得たものを教え

関連する問題