     
     
     func test_ViewModel() {
-        class MockClient: Fetchable {
+        class MockClient: Fetchable {   // 通信クライアントのモックオブジェクトを定義
             let xs: TestableObservable<Int>
             init(scheduler: TestScheduler) {
-                xs = scheduler.createColdObservable([
-                    next(100, 200)  //200 as OK
+                xs = scheduler.createColdObservable([   // モックを作成
+                    next(100, 200)                      // 時刻 100 で 値 HTTP_OK を出力
                     ])
             }
+            // リクエスト結果の Observable をモックで置き換え
             func fetch() -> Observable<Int> { return xs.asObservable() }
         }
         class MockViewModel: ViewModel {

class RxSwiftTestSchedulerExampleTests {
    
    func test_BehaviorSubject() {
        let scheduler = TestScheduler(initialClock: 0)
        
        let xs = scheduler.createHotObservable([
            next(70, 1),
            next(110, 2),
            next(220, 3),

        }
        
        let scheduler = TestScheduler(initialClock: 0)
        let viewModel = MockViewModel(scheduler: scheduler) // テスト対象の ViewModel
        let results     = scheduler.createObserver(State)   // 出力結果を受け取る results
        let disposeBag  = DisposeBag()
        
        // 時刻 100 で viewModel の state を subscribe
        scheduler.scheduleAt(100) {
            viewModel.state.asObservable().subscribe(results).addDisposableTo(disposeBag) }
        
        // 200 で viewModel を load する
        scheduler.scheduleAt(200) {
            _ = viewModel.load().subscribe() }
        
        scheduler.start()
        
        XCTAssertEqual(results.events, [    // 受け取ったイベントを期待値と照合:
            next(100, .Empty),              // 時刻 100 で 値 .Empty を受け取ること
            next(200, .InProgress),         // 200 で .InProgress
            next(300, .Success)             // 300 で .Success
            ])
    }
}
