小编Ale*_*x B的帖子

RxJava 2在单元测试中覆盖IO调度程序

我正在尝试测试以下RxKotlin/RxJava 2代码:

validate(data)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .flatMap { ... }
Run Code Online (Sandbox Code Playgroud)

我正在尝试覆盖调度程序,如下所示:

// Runs before each test suite
RxJavaPlugins.setInitIoSchedulerHandler { Schedulers.trampoline() }
RxAndroidPlugins.setInitMainThreadSchedulerHandler { Schedulers.trampoline() }
Run Code Online (Sandbox Code Playgroud)

但是,运行测试时出现以下错误:

java.lang.ExceptionInInitializerError
...
Caused by: java.lang.NullPointerException: Scheduler Callable result can't be null
    at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39)
    at io.reactivex.plugins.RxJavaPlugins.applyRequireNonNull(RxJavaPlugins.java:1317)
    at io.reactivex.plugins.RxJavaPlugins.initIoScheduler(RxJavaPlugins.java:306)
    at io.reactivex.schedulers.Schedulers.<clinit>(Schedulers.java:84)
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个问题?


使用RxKotlin/RxJava 1和以下调度程序覆盖时,测试工作正常:

RxAndroidPlugins.getInstance().registerSchedulersHook(object : RxAndroidSchedulersHook() {
    override fun getMainThreadScheduler() = Schedulers.immediate()
})

RxJavaPlugins.getInstance().registerSchedulersHook(object : RxJavaSchedulersHook() {
    override fun getIOScheduler() = Schedulers.immediate()
})
Run Code Online (Sandbox Code Playgroud)

谢谢!

kotlin rx-java rx-kotlin

17
推荐指数
4
解决办法
6257
查看次数

主程序与子程序中的代码

你如何决定是将代码放在 Perl 脚本的子例程中还是主要部分中?

我知道如果您需要重用代码,您会将其放入子例程中,但是如果您不重用怎么办?将子例程放入代码组并使其更易于阅读是一个好习惯吗?

示例(主要):

my ($num_one, $num_two) = 1, 2;
print $num_one + $num_two;
print $num_one - $num_two;
Run Code Online (Sandbox Code Playgroud)

示例(在子程序中):

 my ($num_one, $num_two) = 1, 2;
 add($num_one, $num_two);
 subtract($num_one, $num_two);

 sub add {
     my ($num_one, $num_two) = @_;
     return $num_one + $num_two;
 }

 sub subtract {
     my ($num_one, $num_two) = @_;
     return $num_one - $num_two;
 }    
Run Code Online (Sandbox Code Playgroud)

我知道这是一个简单的示例,但对于更复杂的代码(如果子加法和子减法有更多代码),分组到子例程中是否有意义?

谢谢!

perl

3
推荐指数
2
解决办法
2075
查看次数

重用数据库查询结果(Perl)

我正在使用Perl来填充两个html表(每个表都是在自己的Perl CGI脚本中生成的).我有一个运行SQL查询的'helper'脚本.这是一个例子(让我们称之为这个脚本run_sql_query.pl):

my $sql_query = "SELECT ID from TABLE where ID > 3";
our $sth = $dbh->prepare($sql_query);
$sth->execute;
Run Code Online (Sandbox Code Playgroud)

然后,在我的两个Perl CGI脚本中,我做了:

require 'run_sql_query.pl';

our $sth;
while (my ($table_id) = $sth->fetchrow_array) {
...
}
Run Code Online (Sandbox Code Playgroud)

但是,它看起来像是run_sql_query.pl运行两次(每个Perl CGI脚本中运行一次).我怎么能拥有它所以run_sql_query.pl只执行一次然后$sth在两个Perl CGI脚本中使用相同的内容?

perl cgi dbi

3
推荐指数
1
解决办法
654
查看次数

React路由器动态路由不呈现组件

我试图通过以下示例来使路由器动态路由反应起作用:https://github.com/rackt/react-router/tree/master/examples/huge-apps

这是我的设置:

webpack.config.js:

module.exports = {
  devtool: 'inline-source-map',
  entry: './js/app.js',
  output: {
    path: '../public',
    filename: 'test-app.js',
    chunkFilename: '[id].chunk.js',
    publicPath: '/public/'
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel',
        query: {
          presets: [
            'es2015',
            'react'
          ]
        }
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

./js/app.js:

import React from 'react';
import ReactDOM from 'react-dom';
import { createHistory, useBasename } from 'history';
import { Router } from 'react-router';

const history = useBasename(createHistory)({
  basename: '/'
});

const rootRoute = …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router

2
推荐指数
1
解决办法
3012
查看次数

更新 SwiftUI 导航栏标题

我有一个Form将导航栏标题设置为“设置”的视图,以及将导航栏标题设置为“选项”的视图Picker内的视图。Form

导航到Picker视图时,导航栏标题不会设置为“选项”,但后退按钮文本会设置为“选项”。此外,当导航回Form视图时,导航栏标题将更改为“选项”。

如何让导航栏标题在Form查看时为“设置”,在查看时为“选项” Picker?谢谢!

var body: some View {
    NavigationView {
        Form {
            Picker(selection: $currentSelection, label: Text("Options")) {
                ForEach(0 ..< options.count) {
                    Text(options[$0])
                }
            }
            .navigationBarTitle("Options", displayMode: .inline)
        }
        .navigationBarTitle("Settings", displayMode: .inline)
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ios swiftui swiftui-navigationview

2
推荐指数
1
解决办法
2578
查看次数