我正在尝试为我的业务逻辑进行一些单元测试。
数据被读取和写入 Room 数据库,因此逻辑取决于我的数据库中的内容。
我可以轻松buildInMemoryDatabase
测试所有逻辑,但使用速度较慢且需要连接设备的仪器测试。
我只想在RoomRepository
用其他一些Repository
接口实现替换我的地方运行单元测试
class RoomRepository(
private val database: RoomDatabase //actual room database
): Repository {
override fun getFooByType(type: Int): Maybe<List<Item>> {
return database.fooDao()
.getFooByType(type)
.map { names ->
names.map { name -> Item(name) }
}
.subscribeOn(Schedulers.io())
}
}
Run Code Online (Sandbox Code Playgroud)
也许有一种方法可以在主机上运行 Room sqlite?
也许还有另一种解决方案?
我一直在尝试使用 EditText 获得特定行为。这是我启用旋转的简单活动。当我输入一些文本时,
onTextChanged
方法被触发。
当我旋转手机,这种方法不应该被触发,bacause的文字,这是保存在onInstanceState
已被设置为EditText
在onCreate
法。
但是,当我将手机旋转回原来的方向时,方法再次触发!请参阅本文末尾的 logcat。
这是来自新创建的 Android Studio 项目的复制和粘贴代码。
public class MainActivity extends AppCompatActivity {
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.search_query);
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
Log.d("MainActivity", "charSequence:" + charSequence);
} …
Run Code Online (Sandbox Code Playgroud) 有没有办法检查我的集合是否只有一个元素?
if (myCollection.size == 1){
}
Run Code Online (Sandbox Code Playgroud)
就像是
if (myCollection.isSingle()){
}
Run Code Online (Sandbox Code Playgroud)
UPD:我喜欢isSingle()
提议的答案中的命名。
谢谢