我正在努力使bash中的交互式命令行Java程序自动化,以验证该程序为输入产生了正确的输出(基本上是bash中的穷人单元测试)。
例如,如果我有一个Java程序要求用户输入其全名,然后仅输出其名字,则它应如下所示:
Enter your name: John Doe
John
Run Code Online (Sandbox Code Playgroud)
用户输入“ John Doe”的位置。
运行此命令的简单bash命令如下所示:
OUTPUT=`echo "John Doe" | java NameReader`
Run Code Online (Sandbox Code Playgroud)
要么
OUTPUT=`java NameReader <<< "John Doe"`
Run Code Online (Sandbox Code Playgroud)
两者的麻烦在于$ OUTPUT现在包含以下内容:
Enter your name: John
Run Code Online (Sandbox Code Playgroud)
因为发送到stdin的文本(及其伴随的换行符)不会像我们在控制台中看到的那样在程序的输出中复制。
理想情况下,$ OUTPUT将包含以下内容:
Enter your name: John Doe
John
Run Code Online (Sandbox Code Playgroud)
但是我可以忍受这个:
Enter your name:
John
Run Code Online (Sandbox Code Playgroud)
(输入被完全省略,但是输出如预期的那样在新行中)
bash中是否有一种方法(不更改底层的Java程序)来获取被输送到stdin的文本,也可以在Java程序读取的“时间”将其输送到stdout,因此捕获了完整的交互式会话?
(另一个注意事项:一些搜索表明spawn / expect命令可能会有所帮助,但是将在其上运行的系统似乎没有可用的命令)
我有一个iOS(Swift)应用程序,AppDelegate中包含以下代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FIRApp.configure()
FIRDatabase.database().persistenceEnabled = true
return true
}
Run Code Online (Sandbox Code Playgroud)
该应用程序崩溃persistenceEnabled = true
,有异常FIRAppNotConfigured
和消息"Failed to get default FIRDatabase instance. Must call FIRApp.configure() before using FIRDatabase."
显然,我之前已经打过电话FIRApp.configure()
,所以建议的解决方案是不正确的.日志输出甚至显示"Configuring the default app"
何时调用.
可能是什么问题,我如何解决它,以便我可以使用FIRDatabase?